SQL Server: изменение свойства «Имя приложения» для целей аудита
-
11-07-2019 - |
Вопрос
Поскольку мы не реализуем пользователей наших приложений как пользователей на сервере SQL, при подключении сервера приложений к базе данных каждое приложение всегда использует одинаковые учетные данные для подключения к каждой базе данных.
Это представляет проблему аудита. Используя триггеры, мы хотим хранить каждое обновление, вставлять и удалять и приписывать каждое конкретному пользователю. Одним из возможных решений является добавление «обновлено пользователем». столбец каждой таблицы и обновлять это каждый раз. Это означает новый столбец в каждой таблице и новый параметр в каждой хранимой процедуре. Это также означает, что вы можете делать только мягкие удаления.
Вместо этого я предлагаю использовать свойство «Имя приложения» строки подключения и прочитать его с помощью свойства App_Name () внутри триггера. Я проверил это с помощью простого приложения, и оно, кажется, работает (формат может быть таким: App = MyApp | User = 100).
Вопрос для вас, ребята, это плохая идея, и у вас есть идея получше?
Решение
Я использую SET CONTEXT_INFO для этого. Это именно то, что вам нужно.
Другие советы
Это, конечно, кажется возможным решением, хотя вам нужно будет вводить имя пользователя в строку подключения каждый раз, когда загружается ваше приложение. Обратите внимание, что это решение, вероятно, не будет работать с веб-приложением, поскольку строка подключения каждый раз будет отличаться, что может привести к огромным проблемам с пулами подключений.
Другой вариант - получить имя хоста / IP-адрес (SELECT host_name ()) и сохранить его вместо этого.
Вам не обязательно нужен новый параметр в каждой хранимой процедуре, так как вы можете изменить каждую хранимую процедуру (или триггер) для автоматической вставки App_Name / Hostname.
Потенциальным недостатком является то, что любые изменения, выполненные через Management Studio, не будут иметь пользовательского App_Name, и у вас останется " Microsoft Management Studio " как пользователь. Р>
Мы используем свойство «Имя приложения» для управления триггерами аудита и не видим никаких проблем с его использованием, а также не замечаем никаких проблем со скоростью (хотя в нашем случае мы специально не проводим аудит для определенных приложений, поэтому его сложно измерить, сколько времени не делать что-то занимает :))