【问题标题】:capture web session info in sql server trigger在 sql server 触发器中捕获 Web 会话信息
【发布时间】:2013-07-28 10:16:35
【问题描述】:
我创建了一个触发器来审核我的 Web 应用程序中对表行的更改。我的 Web 应用程序使用单个 db 用户对数据库进行更新。但是,许多不同的用户可以登录网站并进行更新和插入。因此,db 用户将始终相同,但 web 用户将不同
我希望通过某种方式将登录用户捕获到对行进行更改的网站,以便我可以与进行更改的 Web 用户一起审核更改。
有人可以指导我如何在我的 sql 触发器中捕获 Web 会话,以便我知道是谁在进行更改。我可以配置 web.config 文件,以便将会话信息也传递给 sql server 触发器,或者如果有其他方式,请告诉我
问候
阿里夫
【问题讨论】:
标签:
sql-server-2008
triggers
context-info
【解决方案1】:
最可靠的方法是将此 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 操作(连接池)。