gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:06:24 26 4
gpt4 key购买 nike

要求是在登录是 Windows 身份验证或 SQL Server 身份验证时查找哪个操作系统用户登录到 SQL Server 数据库。需要知道世界卫生组织 (客户端 PC 上的 AD 帐户)使用哪个 db 帐户通过什么应用程序登录到 SQL Server。

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

比如我在笔记本电脑上使用了我的AD账号域名,laptop123。域名是Stackoverflow , 用户名是 developer1 ,启动Microsoft SQL Server Management Studio,连接DB账号(SQL Server认证)ERPAPPUSER .我需要记录域用户Stackoverflow/developer1 .

我可以轻松获取用户 ERPAPPUSER 的信息从 laptop123 登录使用 Microsoft SQL Server Management Studio。

我创建了一个数据库登录触发器,可以获取客户端用户名、主机名、登录时间、应用程序名称等,但无法获取客户端操作系统用户名。

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的用户将无法登录。

最佳答案

简短的回答是否定的,这是不可能的。

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

关于sql-server - 从 SQL Server 获取客户端操作系统用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36612845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com