Sql-Server

查找不顯示主機名的 spid 源

  • May 15, 2017

我有一個繁忙的 SQL 2012 伺服器,與一個特定數據庫的連接(使用相同的 SQL 登錄名)不顯示“主機名”,我需要找出這些連接來自哪個(幾個)框。

我已經嘗試了所有普通的內置工具和第 3 方工具(、、、、、 SSMS 活動監視器master.sys.processes,甚至 SQL Profiler 和 Idera 診斷管理器) sys.dm_exec_sessions,它們都不能給我這些連接背後的伺服器/客戶端的主機名,大概是因為它們都使用相同的底層系統表/視圖。sp_who2``sp_WhoIsActive

我也可以使用 IP 地址,但也看不到任何從 SQL 中確定它的方法。

如果有任何幫助:

  • sys.dm_exec_sessions顯示的client_interface_name是 ODBC
  • program_name兩者都沒有擷取
  • 使用者是一個 SQL 帳戶,恰好是 SYSADMIN(是的,我知道…)

我在這裡找到了一個相關的問題(儘管來自另一邊),但沒有得到解答。

此時我很想禁用該使用者,以便在 SQL 錯誤日誌中擷取一些失敗的登錄,但我不認為應用程序團隊會對此感到滿意。

看起來我只是問錯了問題,我在下面找到了答案:如何從 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

引用自:https://dba.stackexchange.com/questions/173481