You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Windows登录名填充审计表ActionedBy字段

解决审计表获取AD登录名的问题

直接修改函数(适用于Windows认证直接连接数据库的场景)

你当前用的SUSER_NAME()返回的是数据库安全主体的名称,如果要获取Windows AD登录名,应该换成SUSER_SNAME()函数。这个函数会返回登录实例的完全限定登录名,格式通常是DOMAIN\UserName。

修改后的INSERT审计语句:

INSERT INTO Audit(CallID, Action, ActionedBy, ActionDate)
SELECT CallID, 'INSERT', SUSER_SNAME(), GETDATE()
FROM INSERTED;

应用使用统一数据库账号连接的场景(常见于三层架构)

如果你的应用是通过固定的数据库服务账号(比如你提到的Database_User)连接数据库,数据库层面无法直接获取终端用户的AD登录名——因为此时数据库只识别连接它的服务账号。这种情况需要:

  • 应用层在执行数据操作时,将当前登录用户的AD账号作为参数传入(比如调用存储过程或执行SQL时额外携带)
  • 审计逻辑中直接使用这个传入的账号值,而非数据库内置函数

举个例子,假设应用调用存储过程时传入@UserADName参数,审计部分的SQL可以改成:

INSERT INTO Audit(CallID, Action, ActionedBy, ActionDate)
SELECT CallID, 'INSERT', @UserADName, GETDATE()
FROM INSERTED;

补充说明

  • 如果数据库是混合模式,用户用SQL账号登录,SUSER_SNAME()返回的就是SQL账号名,这种场景下同样需要从应用层传入AD账号
  • 要确保审计表的ActionedBy字段长度足够容纳完整的AD登录名(建议设置为NVARCHAR(128)或更长)

内容的提问来源于stack exchange,提问作者Lisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:57:32