Исходная информация:
- Я создаю коллекцию таблиц аудита для отслеживания обновлений и удалений в наборе таблиц данных для моего приложения.
- Аудиторские записи создаются с помощью триггеров.
- DML в базе данных моего приложения обычно поступает от имени входа, которое служба использует для входа в базу данных. Из-за этого, я думаю, что результат
SYSTEM_USER
всегда будет одинаковым при вызове в триггере. - Мое приложение не хранит пользовательские данные в настоящее время, хотя
UserId
ему каждый раз передается строка (выполняется исключительно в хранимых процедурах).
Проблема, с которой я столкнулся, заключается в том, что когда пользователь удаляет запись, я хочу знать, кто это сделал. Поскольку это будет сделано при том же входе в систему, я не хочу видеть, что все действия были выполнены службой, я хочу видеть, какой пользователь это сделал. Это не проблема для обновления, потому что у нас есть ModifiedBy
столбцы, которые будут обновляться через отправленные UserId
обновления.
Вопрос заключается в следующем: есть ли способ установить SYSTEM_USER
или иным образом получить информацию о пользователе в триггер при запуске удаления?
«Лучшая» идея, которая у меня есть сейчас, хотя я не уверен, что это хорошая идея, заключается в том, что в сервисе я проверяю, находится ли текущий пользователь UserId
в базе данных как пользователь, и, если нет, создает пользователя. объект для них. Затем запустите хранимые процедуры с помощью EXECUTE AS User = @UserId
. Затем, когда DML будет выполнен в хранимой процедуре и триггер срабатывает, SYSTEM_USER
следует вернуть пользователя из EXECUTE AS
.