0

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

我想用某种方法将登录用户捕获到对行进行更改的网站,以便我可以与进行更改的 Web 用户一起审核更改。

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

问候

阿里夫

4

1 回答 1

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 声明此数据在范围终止时不会重置,因此您需要考虑这一点,以避免用户 ID 跨越 DML 操作(连接池)。

于 2013-07-29T05:50:47.060 回答