Sql-Server
查找訪問特定 SQL Server 的所有 IP 或使用者
假設我找到了一個 SQL Server,但我不知道哪些應用程序連接到它。也許我找到了一個應用程序,但我不確定它是否是唯一使用它的應用程序。
有沒有找到所有不同連接的好方法?
您可以在 Activity Monitor 中查看 SSMS 中目前正在執行的程序。
您還可以使用sys.dm_exec_sessions以及sys.dm_exec_connections和sys.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_time
:last_successful_logon
IP 和其他資訊可以通過 JOIN 檢索到sys.dm_exec_connections on
session_id
:client_net_address
,local_net_address
,connect_time
, ports, …sys.dm_exec_requests也可以提供有用的資訊:
command
type,sql_handle
, …此查詢只是一個範例。您必須
JOIN
將這 3 個視圖放在一起,並從其中任何一個中輸出/儲存相關資訊。當 SQL Server 重新啟動時,這些視圖中的數據會消失。因此,如果應用程序沒有定期連接,最好使用作業或腳本 (Powershell) 定期儲存它們。