背景资料:
- 我正在创建审核表的集合,以跟踪对我的应用程序的一组数据表的更新和删除。
- 审计记录是通过触发器创建的。
- 我的应用程序数据库中的DML通常来自服务用于进入数据库的登录名。因此,我认为
SYSTEM_USER
在触发器中调用时,结果始终是相同的。 - 我的应用程序当前不存储用户数据,尽管
UserId
每次执行DML时都会为其分配一个字符串(仅在存储过程中完成)。
我遇到的问题是,当用户删除记录时,我想知道是谁做的。因为它将通过相同的登录完成,所以我不想看到所有操作都是由服务完成的,所以我想看看哪个用户做了。这不是更新的问题,因为我们有一些ModifiedBy
列会通过发送更新来UserId
更新。
问题是:SYSTEM_USER
运行删除操作时,有没有办法将用户信息设置为或以其他方式使用户信息进入触发器?
我现在拥有的“最佳”想法(尽管我不确定这是否是一个好主意)是,在服务中,我检查是否当前UserId
作为用户存在于数据库中,如果不是,则创建一个用户为他们反对。然后使用运行存储过程EXECUTE AS User = @UserId
。然后,当在存储过程中完成DML并触发触发器时,SYSTEM_USER
应从中返回用户EXECUTE AS
。