如何获取SQLlogin用户的Windowslogin用户名

通过使用sp_who2我可以获得当前login用户和机器名称的列表。 某些用户正在使用SQL Serverlogin用户名(如sa)。 有什么办法可以让SQLlogin用户的Windowslogin用户名?

如果没有办法从机器名称获取Windowslogin用户,我可以使用WMI类或C#来通过他们的机器名称findWindowslogin用户名吗?

我的SQL服务器是Microsoft SQL Server 2005,Windows是Server 2003。

SQL登录和NT用户名之间没有关联。

你在这里问的类似: 如何找出用户名和机器名来访问SQL服务器

如果超过1个用户登录到客户端PC(例如服务帐户,远程用户通过mstsc等)WMI方法将是不明确的。 任何像这样的方法都需要客户端PC上的管理员权限。

我怀疑你可以实时做到这一点。

你所能做的只是在sys.dm_exec_connections记录client_net_address ,然后从那里回溯,也许通过WMI而不是从SQL server本身。

你需要用户名吗? 或者只是客户端PC,所以你可以更改应用程序连接字符串?

如果只有相对较少的SQL连接,则最终的解决方案是更改sa密码并查看谁调用

要获取用户名和机器名,请使用以下命令:

 SELECT HOST_NAME() AS HostName, SUSER_NAME() LoggedInUser 
  1. 您可以通过查询会话和连接来获取客户端IP地址和远程PID。
  2. 使用这个信息建立一个TASKLIST命令。
  3. 使用XP_CMDShell来执行建立的命令来获取用户。

     DECLARE @CMD VARCHAR(500) = (SELECT TOP 1 'tasklist /S ' + client_net_address + ' /FI "PID eq ' + CONVERT(VARCHAR(MAX),host_process_id) + '" /V /FO LIST /U DOMAIN\Admin /P password' FROM sys.dm_exec_connections C JOIN sys.dm_exec_sessions S ON C.session_id = S.session_id WHERE S.session_id = @@SPID) EXEC xp_cmdshell @CMD 

你可以随意使用它。 通过在ALL SERVER触发器中使用它或者为Ad-Hoc审计发送邮件给DBA。 希望这有助于=)

我不知道是否有办法做到你所要求的。 不过,我过去所做的是使用sql分析器,并在结果列中包含“主机名”。 我工作的机器名称是唯一的,可以追溯到用户。 如果你的机器名称也是唯一的,这可能会得到你需要的结果。 您可以在登录名= sa上过滤以缩小结果范围。

我在黑暗中拍摄,但也许我的想法会帮助你找到你的答案。 从我所能告诉的是没有直接的方法来获得这个。 哪个恕我直言,是一件好事。 现在有一些想法:

如果这是一个自定义应用程序,则可以将该信息作为应用程序名称包含在连接字符串中。 如果这是一个服务器应用程序和你使用的模拟,你将失去连接池的能力,如果你这样做。 在客户端应用程序,这不应该是一个问题。

您的客户在任何时候是否只有一个登录用户? 例如一个桌面应用程序? 你可以像这样使用WMI 。 如果这又是一个服务器,并且您想知道在您之下运行的安全上下文可能仍然可以获取此信息。 否则,你至少可以弄清谁启动了这个过程。

SQL事件探查器知道客户端进程的PID。 但我找不到它存储在SQL中的位置。 如果你能找到你如何获得PID(你可以通过编程方式运行一个跟踪并将登录事件存储到一个表中)。 您可以使用此脚本获取启动用户。

好。 我尝试使用WMI类来获取远程计算机的信息(WMI类\ fullmancinename \ roor \ cimc2,以及从Win32_ComputerSystem中的对象查询选择*)。 它在我的本地计算机上工作,但是使用远程计算机名称,您需要传递具有足够安全权限的用户名和密码才能访问或读取。 从远程计算机获取用户名是另一个Windows安全问题。

我的尝试代码是基于WMI中的参考C#读取Windows登录用户名 。