要求是每当登录名为Windows身份验证或SQL Server身份验证时,查找哪个操作系统用户登录到SQL Server数据库。需要知道世卫组织(客户端PC上的AD帐户)使用哪个数据库帐户用什么应用程序登录到SQL Server。从SQL Server获取客户端操作系统用户名
的问题是我无法获取客户端的操作系统用户名时。
例如一个SQL Server身份验证用户登录时,我用一台笔记本电脑,laptop123我的AD帐户的域名。域名是Stackoverflow
,用户名是developer1
,启动Microsoft SQL Server Management Studio,连接DB帐户(SQL Server身份验证)ERPAPPUSER
。我需要记录域用户Stackoverflow/developer1
。
我可以使用Microsoft SQL Server Management Studio轻松获取用户ERPAPPUSER
从laptop123
登录的信息。
我创建了一个数据库登录触发器,可以获取客户端用户名,主机名,登录时间,应用程序名称等,但无法获取客户端操作系统用户名。
CREATE TRIGGER DB_ServerLogon
ON ALL SERVER
WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
INSERT INTO audit_history.dbo.db_logon_history
SELECT
ORIGINAL_DB_NAME(),
ORIGINAL_LOGIN(),
@@SPID,GETDATE(),
HOST_NAME(),
APP_NAME()
END
GO
非常感谢!
- 将'WITH EXECUTE AS'添加为'',否则对于无法访问db_logon_history的所有用户将无法登录。
费尔南多,当你登录你没有使用域帐户登录SQL Server和域帐户不会传递到SQL Server。您可以使用任何设备登录。如果您希望在使用可信安全性时将客户端详细信息传递给SQL Server,则必须从前端将其作为参数传递给SQL Server。即使用存储过程或类似的。顺便问一下好问题。并问好。 – cameront