SQLサーバーを見つけたのに、どのアプリケーションがそれに接続しているのかわかりません。多分私は1つのアプリケーションを見つけますが、それがそれを使用している唯一のアプリケーションかどうかはわかりません。
すべての個別の接続を見つける良い方法はありますか?
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およびその他の情報は、session_id
:client_net_address
、local_net_address
、connect_time
、ports、。 sys.dm_exec_connections へのJOINを使用して取得できます。 。
sys.dm_exec_requests も役立つ情報を提供できます:command
タイプ、sql_handle
、...
このクエリは単なるサンプルです。これらの3つのビューを一緒にJOIN
して、どちらかから関連情報を出力/保存する必要があります。
これらのビューのデータは、SQL Serverを再起動すると消えます。したがって、アプリケーションが定期的に接続されていない場合は、ジョブまたはスクリプト(Powershell)を使用して定期的にアプリケーションを保存することをお勧めします。
Julienの提案もお勧めしますが、SQL Serverエージェントを介してクエリをスケジュールする方が適切だと思います。実行するたびに、情報を物理テーブルにダンプします。 2つのDMVが結合されますsys.dm_exec_connections
およびsys.dm_exec_sessions
最初に物理テーブルを作成するように
create table Session_Information
( session_id int,
net_transport nvarchar(40),
Host_name nvarchar(128),
program_name nvarchar(128),
nt_user_name nvarchar(128),
connect_time datetime,
client_interface_name nvarchar(128),
client_net_address varchar(48),
local_net_address varchar(48),
login_name nvarchar(128),
nt_domain nvarchar(128),
login_time datetime
);
次に、このテーブルにレコードを挿入します。
Insert into Session_Information
SELECT
c.session_id,
c.net_transport,
s.Host_name,
s.program_name,
s.nt_user_name,
c.connect_time,
s.client_interface_name,
c.client_net_address,
c.local_net_address,
s.login_name,
s.nt_domain,
s.login_time
FROM sys.dm_exec_connections AS c
JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id;
これをSQL Serverエージェント経由で15分ごとに実行するようにスケジュールします。1日の終わりに、テーブルsession_information
。
成功したログインと失敗したログインのSQL Serverログイン監査を有効にします。 https://docs.Microsoft.com/en-us/sql/ssms/configure-login-auditing-sql-server-management-studio
監査スコープを変更すると、SQLサービスの再起動が必要になります。サービスが再起動されると、成功したすべてのログイン(ユーザー)とそのIPアドレスがSQL Serverログに記録され始めます。このデータは約1週間または2週間収集できます。その後、ログファイルを分析して、監視期間中にSQL ServerデータベースにアクセスしたすべてのIPアドレス(およびユーザー)を一覧表示します。
SSRSコンポーネントも同じボックスにインストールされている場合、ReportServerデータベースのExecutionLogテーブルを分析して、SSRSポータルにアクセスするすべてのログインを一覧表示できます。