2013-07-28 54 views
0

我创建了一个触发器来审计来自我的web应用程序对表行的更改。我的Web应用程序使用单个数据库用户来更新数据库。但是,许多不同的用户可以登录到网站并进行更新和插入。因此,数据库的用户将永远是相同的,但网络用户将是不同的捕获sql服务器触发器中的web会话信息

我想有一些方法来捕获登录的用户到正在进行更改的行的网站,以便我可以审核沿与正在进行更改的Web用户进行交互。

有人可以请指导我如何捕捉我的SQL触发器中的网络会话,以便我知道谁在进行更改。我可以配置web.config文件,从而使会话信息也传递到SQL服务器触发器或有一些其他的方式,请让我知道

问候

阿里夫

回答

0

最可靠的方法是让您将此LoggedInUserId传递到已修改的表(可能存储在ModifiedBy列中)。这可能是一个执行和维护的痛苦,尤其是在遗留系统中,但其坚如磐石。

我已经使用CONTEXT_INFO将一小部分元数据与会话相关联,但它也不乏奇怪之处。

一个简单的例子:

declare @context varbinary(128); 
select @context = cast('[email protected]' as varbinary(128)); 
set context_info @context; 
go 

,并从触发器可以检索喜欢的用户名:

declare @context varchar(128); 
select @context = cast(context_info() as varchar(128)); 
select @context; 

BOL指出,当范围终止,所以你需要这些数据不会被重置考虑避免用户标识跨越DML操作(连接池)。