Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从SQL Server获取客户端操作系统用户名_Sql Server_Audit - Fatal编程技术网

Sql server 从SQL Server获取客户端操作系统用户名

Sql server 从SQL Server获取客户端操作系统用户名,sql-server,audit,Sql Server,Audit,要求是在登录为Windows身份验证或SQL Server身份验证时查找哪个操作系统用户登录到SQL Server数据库。需要知道谁(客户端PC上的AD帐户)使用了哪个db帐户登录到SQL Server的应用程序 问题是,当SQL Server身份验证用户登录时,我无法获取客户端的操作系统用户名 例如,我在笔记本电脑laptop123上使用了我的广告帐户域名。域名是Stackoverflow,用户名是developer1,启动了Microsoft SQL Server Management St

要求是在登录为Windows身份验证或SQL Server身份验证时查找哪个操作系统用户登录到SQL Server数据库。需要知道谁(客户端PC上的AD帐户)使用了哪个db帐户登录到SQL Server的应用程序

问题是,当SQL Server身份验证用户登录时,我无法获取客户端的操作系统用户名

例如,我在笔记本电脑laptop123上使用了我的广告帐户域名。域名是
Stackoverflow
,用户名是
developer1
,启动了Microsoft SQL Server Management Studio,与DB帐户(SQL Server身份验证)
ERPAPPUSER
连接。我需要记录域用户
Stackoverflow/developer1

我可以使用Microsoft SQL Server Management Studio轻松获取用户从
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
非常感谢


--添加了“作为”执行,否则所有无权访问db_登录历史记录的用户将无法登录。

简短回答是“否”,这是不可能的


回答很长,SQL Server支持两种安全模式。这些是“Windows身份验证模式”和“混合模式”,即“SQL Server和Windows身份验证模式”。第二种模式意味着您可以使用SQL Server登录或Windows帐户登录。Windows帐户将与上面(a)中的相同。现在,当您使用Windows登录时,它是一个受信任的连接,因此您必须授权Windows帐户/组才能访问SQL Server实例。连接是针对用户登录到windows时创建的令牌的身份验证。此令牌被传递到SQL Server,因此可以对其进行解析,以返回上面描述的信息。但是,当您使用SQL Server模式登录时,您不是使用域帐户登录的,因此不会向SQL Server传递域帐户。而是使用在服务器上下文中运行的SQL Server本机帐户登录。现在,您可以使用任何类型的设备登录,而不仅仅是windows客户端。如果希望在使用SQL Server模式时将客户端详细信息传递给SQL Server,则必须将其作为前端的参数传递。i、 e.使用存储过程或类似程序。(顺便提一下,这个问题问得很好。)

Fernando,当您使用SQL Server登录时,您没有使用域帐户登录,域帐户也没有传递给SQL Server。您可以使用任何类型的设备登录。如果希望在使用trusted security时将客户端详细信息传递给SQL Server,则必须从前端将其作为参数传递。i、 e.使用存储过程或类似程序。顺便提一下,这是个好问题。问得好。