【问题标题】: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 操作(连接池)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多