小编Jer*_*ore的帖子

使用共享登录时,如何知道用户对审计表执行删除操作?

背景资料:

  • 我正在创建一组审计表,以跟踪我的应用程序对一组数据表的更新和删除。
  • 审计记录是通过触发器创建的。
  • 我的应用程序数据库中的 DML 通常来自服务用于进入数据库的登录名。因此,我认为SYSTEM_USER在触发器中调用时,结果总是相同的。
  • 我的应用程序当前不存储用户数据,尽管UserId每次完成 DML 时都会为其提供一个字符串(仅在存储过程中完成)。

我遇到的问题是,当用户删除记录时,我想知道是谁做的。因为它将通过相同的登录完成,我不想看到所有操作都是由服务完成的,我想看看是哪个用户完成的。这不是更新的问题,因为我们有ModifiedBy将通过发送的UserId更新来更新的列。

问题是:有没有办法在SYSTEM_USER运行删除时设置或以其他方式将用户信息放入触发器中?

我现在拥有的“最佳”想法,虽然我不确定这是否是一个好主意,但在服务中,我检查当前UserId是否以用户身份存在于数据库中,如果没有,则创建一个用户为他们反对。然后运行存储过程EXECUTE AS User = @UserId。然后当 DML 在存储过程中完成并且触发器触发时,SYSTEM_USER应该从EXECUTE AS.

trigger sql-server audit azure-sql-database users

9
推荐指数
1
解决办法
8999
查看次数

标签 统计

audit ×1

azure-sql-database ×1

sql-server ×1

trigger ×1

users ×1