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