2009-05-11 5 views
0

У меня есть классическая 3-уровневая сборка веб-приложений с MySQL и Tomcat.Принесите текущего пользователя на уровень базы данных

Я хочу сохранить идентификатор создателя каждой записи базы данных для всех таблиц в столбце creator_id или просто зарегистрировать его где-нибудь. Текущий пользователь хранится в объекте сеанса http. Изменить все запросы и пропустить параметр идентификатора создателя неприемлем.

Могу ли я решить проблему с помощью триггеров, изменить команды таблиц и т. Д.? Каков наилучший способ сделать это?

PS. Взломы приемлемы и приветствуются.

ответ

2

база данных не может знать, какой пользователь сайта отправляет запрос, все это знает, который пользователь базы данных. И если это веб-приложение, это, вероятно, тот же пользователь базы данных все время, независимо от того, кто зарегистрирован на веб-сайте.

Короткий ответ: нет, вам придется идти с вашим «неприемлемым» вариантом, если вы не хотите создать пользователя базы данных для каждого пользователя сайта и открыть сайт для подключения к базе данных, используя те, вместо одного «общего» пользователя. Но это может привести к большему количеству проблем, чем оно решает.

+0

Я думал о разделенном пользователе db и подключении db для всех открытых сеансов, но эта функция не поддерживается используемой инфраструктурой. Есть ли другой способ? Хаки приемлемы и приветствуются. –

0

Основываясь на том, что вы говорите в своем вопросе, ваш логический идентификатор пользователя приложения отличается от вашего идентификатора подключения к базе данных. ЕСЛИ это так, как может база данных знать, что такое идентификатор пользователя логического приложения? если вы не пройдете его, нет никакого способа узнать, кто что делает. Вы говорите, что неприемлемо модифицировать все запросы, чтобы передать это. Однако вам нужно будет только изменить сохраненные данные, где вы хотите записать это значение «creator_id». Вам также нужно будет изменить эти таблицы. Надеемся, у вас есть таблица, содержащая всех этих пользователей, и вы можете FK в новый столбец в эту таблицу.