Sql server 从SQL Server获取客户端操作系统用户名
要求是在登录为Windows身份验证或SQL Server身份验证时查找哪个操作系统用户登录到SQL Server数据库。需要知道谁(客户端PC上的AD帐户)使用了哪个db帐户登录到SQL Server的应用程序 问题是,当SQL Server身份验证用户登录时,我无法获取客户端的操作系统用户名 例如,我在笔记本电脑laptop123上使用了我的广告帐户域名。域名是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
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.使用存储过程或类似程序。顺便提一下,这是个好问题。问得好。