1つの特定のデータベースへの接続(同じSQLログインを使用)に「ホスト名」が表示されない忙しいSQL 2012サーバーがあり、これらの接続が(複数の)どのボックスから行われているかを調べる必要があります。
私はすべての通常の組み込みツールとサードパーティツール(master.sys.processes
、sys.dm_exec_sessions
、sp_who2
、sp_WhoIsActive
、SSMSアクティビティモニター、SQLプロファイラーとIderaも含めてDiagnostic Manager)、これらすべてがこれらの接続の背後にあるサーバー/クライアントのホスト名を提供することはできません。
私もIPアドレスで大丈夫ですが、SQL内からIPアドレスを判別する方法もわかりません。
これが助けになる場合:
sys.dm_exec_sessions
は、client_interface_name
がODBCであることを示していますprogram_name
についても何もキャプチャされていません私は ここに関連する質問 (反対側からではあるが)を見つけましたが、それは答えられませんでした。
この時点でユーザーを無効にして、失敗したログインの一部をSQLエラーログに記録できるようにしたいと思っていますが、アプリケーションチームがこれに満足することはないと思います。
質問を間違えていたように見えますが、答えは以下のとおりです。 SQL Server 2008自体からクライアントIPアドレスを取得する方法 :
アーロンがコメントで述べたように、私は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