查找不显示主机名的 spid 源

Bra*_*adC 5 sql-server sql-server-2012 connections

我有一个繁忙的 SQL 2012 服务器,其中到一个特定数据库的连接(使用相同的 SQL 登录)不显示“主机名”,我需要找出这些连接来自哪个(几个)框。

我已经尝试了所有正常的内置和第三方工具(master.sys.processessys.dm_exec_sessionssp_who2sp_WhoIsActive,SSMS的活动监视器,甚至是SQL事件探查器和井寺诊断经理),他们都不能给我的服务器的主机名/客户端这些连接背后,大概是因为它们都使用相同的底层系统表/视图。

我也可以使用 IP 地址,但也看不到任何方法可以从 SQL 中确定该地址。

如果这是任何帮助:

  • sys.dm_exec_sessions显示client_interface_name是 ODBC
  • program_name两者都没有捕获
  • 用户是一个 SQL 帐户,恰好是 SYSADMIN(是的,我知道...)

我在这里找到了一个相关的问题(尽管来自另一边),但没有得到解答。

在这一点上,我很想禁用用户,以便我可以在 SQL 错误日志中捕获一些失败的登录,但我认为应用程序团队不会对此感到满意。

Bra*_*adC 5

看起来我只是问错了问题,我在下面找到了答案:如何从 SQL Server 2008 本身获取客户端 IP 地址?

正如 Aaron 在评论中提到的,我不得不使用sys.dm_exec_connections来获取源 IP。这是我使用的查询的最终版本:

SELECT s.session_id, s.login_name, DB_NAME(s.database_id) as database_name, 
    s.host_name, s.program_name, c.client_net_address, client_tcp_port,
    c.net_transport, c.auth_scheme, s.login_time
FROM sys.dm_exec_sessions s
INNER JOIN sys.dm_exec_connections c 
ON s.session_id = c.session_id
WHERE s.login_name = 'MYSTERY_USER'
ORDER BY s.session_id
Run Code Online (Sandbox Code Playgroud)