【发布时间】:2016-08-05 09:38:37
【问题描述】:
要求是在登录是 Windows 身份验证或 SQL Server 身份验证时查找登录到 SQL Server 数据库的操作系统用户。需要知道 WHO(客户端 PC 上的 AD 帐户)使用哪个 db 帐户使用哪个应用程序登录 SQL Server。
问题是当 SQL Server 身份验证用户登录时,我无法获取客户端的操作系统用户名。
例如,我在笔记本电脑上使用了我的AD账号域名,laptop123。域名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 'as' ',否则所有无权访问db_logon_history的用户将无法登录。
【问题讨论】:
-
Fernando,当您使用 SQL Server 登录时,您没有使用域帐户登录,并且域帐户不会传递给 SQL Server。您可以使用任何类型的设备登录。如果您希望在使用受信任的安全性时将客户端详细信息传递给 SQL Server,则必须将其作为参数从前端传递。即使用存储过程或类似的。顺便问下好问题。问得好。
标签: sql-server audit