Sql-Server

查找訪問特定 SQL Server 的所有 IP 或使用者

  • January 16, 2018

假設我找到了一個 SQL Server,但我不知道哪些應用程序連接到它。也許我找到了一個應用程序,但我不確定它是否是唯一使用它的應用程序。

有沒有找到所有不同連接的好方法?

您可以在 Activity Monitor 中查看 SSMS 中目前正在執行的程序。

您還可以使用sys.dm_exec_sessions以及sys.dm_exec_connectionssys.dm_exec_requests 來獲取它。

詢問:

SELECT DB_NAME(database_id) as [DB]
   , login_name
   , nt_domain
   , nt_user_name
   , status
   , host_name
   , program_name
   , COUNT(*) AS [Connections]
FROM sys.dm_exec_sessions
WHERE database_id > 0 -- OR 4 for user DBs
GROUP BY database_id, login_name, status, host_name, program_name, nt_domain, nt_user_name;

主機名、程序名或域使用者名通常提供比 IP 地址更多的資訊。可以添加其他列,例如login_timelast_successful_logon

IP 和其他資訊可以通過 JOIN 檢索到sys.dm_exec_connections on session_id: client_net_address, local_net_address, connect_time, ports, …

sys.dm_exec_requests也可以提供有用的資訊:commandtype, sql_handle, …

此查詢只是一個範例。您必須JOIN將這 3 個視圖放在一起,並從其中任何一個中輸出/儲存相關資訊。

當 SQL Server 重新啟動時,這些視圖中的數據會消失。因此,如果應用程序沒有定期連接,最好使用作業或腳本 (Powershell) 定期儲存它們。

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