Sql-Server
查找不顯示主機名的 spid 源
我有一個繁忙的 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
是 ODBCprogram_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