web-dev-qa-db-ja.com

ホスト名を示さないspidのソースを見つける

1つの特定のデータベースへの接続(同じSQLログインを使用)に「ホスト名」が表示されない忙しいSQL 2012サーバーがあり、これらの接続が(複数の)どのボックスから行われているかを調べる必要があります。

私はすべての通常の組み込みツールとサードパーティツール(master.sys.processessys.dm_exec_sessionssp_who2sp_WhoIsActive、SSMSアクティビティモニター、SQLプロファイラーとIderaも含めてDiagnostic Manager)、これらすべてがこれらの接続の背後にあるサーバー/クライアントのホスト名を提供することはできません。

私もIPアドレスで大丈夫ですが、SQL内からIPアドレスを判別する方法もわかりません。

これが助けになる場合:

  • sys.dm_exec_sessionsは、client_interface_nameがODBCであることを示しています
  • program_nameについても何もキャプチャされていません
  • ユーザーはたまたまSYSADMINであるSQLアカウントです(そうです、私は知っています...)

私は ここに関連する質問 (反対側からではあるが)を見つけましたが、それは答えられませんでした。

この時点でユーザーを無効にして、失敗したログインの一部をSQLエラーログに記録できるようにしたいと思っていますが、アプリケーションチームがこれに満足することはないと思います。

3
BradC

質問を間違えていたように見えますが、答えは以下のとおりです。 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
3
BradC