Подтвердить что ты не робот

SQL Server: изменение свойства "Имя приложения" для целей аудита

Поскольку мы не реализуем пользователей наших приложений как пользователей на SQL-сервере, когда сервер приложений подключается к базе данных, каждое приложение всегда использует те же учетные данные для присоединения к каждой базе данных.

Это представляет проблему аудита. Используя триггеры, мы хотим хранить каждое обновление, вставлять и удалять и связывать их с конкретным пользователем. Одним из возможных решений является добавление столбца "обновлено пользователем" в каждую таблицу и каждый раз обновлять его. Это означает новый столбец для каждой таблицы и новый параметр для каждой хранимой процедуры. Это также означает, что вы можете выполнять только мягкие удаления.

Вместо этого я предлагаю использовать свойство Application Name строки подключения и читать это с помощью свойства App_Name() внутри триггера. Я тестировал это с помощью простого приложения и, похоже, работал (формат может быть таким: App = MyApp | User = 100).

Вопрос для вас, ребята, это плохая идея, и у вас есть лучший?

4b9b3361

Ответ 1

Я использую SET CONTEXT_INFO для этого. Это просто то, что вам нужно.

Ответ 2

Это, безусловно, похоже на возможное решение, хотя вам нужно вводить имя пользователя в строку подключения каждый раз, когда ваше приложение загружается. Обратите внимание, что это решение, вероятно, не будет работать с веб-приложением, так как ваша строка соединения будет отличаться каждый раз, что может привести к огромным проблемам пула соединений.

Другой вариант - получить имя хоста/IP-адрес (SELECT host_name()) и сохранить его вместо этого.

Вам не обязательно будет нужен новый параметр для каждой хранимой процедуры, так как вы можете изменить каждую хранимую процедуру (или триггер), чтобы автоматически вставить имя_запуска/хоста.

Потенциальным недостатком является то, что любые изменения, выполняемые с помощью Management Studio, не будут иметь настраиваемого App_Name, и вы останетесь с "Microsoft Management Studio" в качестве пользователя.

Ответ 3

Мы используем свойство Application Name для управления триггерами аудита и не видели никаких проблем с его использованием, и не заметили каких-либо проблем с производительностью (хотя в нашем случае мы специально не проверяем определенные приложения, поэтому его трудно измерьте, сколько времени не делает что-то:))