SQL Server: изменение свойства «Имя приложения» для целей аудита - PullRequest
12 голосов
/ 27 ноября 2008

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 27 ноября 2008

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

2 голосов
/ 27 ноября 2008

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

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

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

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

1 голос
/ 27 ноября 2008

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

...