我创建了一个触发器来审核Web应用程序对表行的更改。我的Web应用程序使用单个db用户对数据库进行更新。但是,许多不同的用户可以登录该网站并进行更新和插入。因此,db用户将始终相同,但Web用户将是不同的
我希望有一些方法可以将登录用户捕获到正在对行进行更改的网站,以便我可以审核更改以及进行更改的Web用户。
有人可以指导我如何在我的sql触发器中捕获Web会话,以便我知道谁在进行更改。我是否可以配置web.config文件以便会话信息也传递给sql server触发器,或者如果有其他方式,请告诉我
此致
阿里夫
答案 0 :(得分:0)
最可靠的方法是将此LoggedInUserId传递给已修改的表,可能存储在ModifiedBy列中。这可能是一种难以实施和维护的问题,特别是在遗留系统中,但其坚如磐石。
我使用CONTEXT_INFO将一小部分元数据与会话相关联取得了一些成功,但它并非没有奇怪之处。
一个简单的例子:
declare @context varbinary(128);
select @context = cast('user@domain.com' as varbinary(128));
set context_info @context;
go
并且,从触发器中,您可以检索用户名,如:
declare @context varchar(128);
select @context = cast(context_info() as varchar(128));
select @context;
BOL声明当范围终止时不会重置此数据,因此您需要考虑这一点以避免userId跨越DML操作(连接池)。