捕获sql server触发器中的Web会话信息

时间:2013-07-28 10:16:36

标签: sql-server-2008 triggers context-info

我创建了一个触发器来审核Web应用程序对表行的更改。我的Web应用程序使用单个db用户对数据库进行更新。但是,许多不同的用户可以登录该网站并进行更新和插入。因此,db用户将始终相同,但Web用户将是不同的

我希望有一些方法可以将登录用户捕获到正在对行进行更改的网站,以便我可以审核更改以及进行更改的Web用户。

有人可以指导我如何在我的sql触发器中捕获Web会话,以便我知道谁在进行更改。我是否可以配置web.config文件以便会话信息也传递给sql server触发器,或者如果有其他方式,请告诉我

此致

阿里夫

1 个答案:

答案 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操作(连接池)。