SQLサーバーを見つけたが、どのアプリケーションがそれに接続しているかがわからないとします。多分私は1つのアプリケーションを見つけますが、それがそれを使用している唯一のアプリケーションかどうかはわかりません。
すべての異なる接続を見つける良い方法はありますか?
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およびその他の情報を取得することができますsys.dm_exec_connectionsにsession_id
:client_net_address
、local_net_address
、connect_time
、ポート、...
sys.dm_exec_requestsも有用な情報を提供できます:command
タイプsql_handle
、...
このクエリは単なるサンプルです。あなた必要がありJOIN
、これらの3つのビュー一緒にし、それらのいずれかからの出力/店舗関連情報。
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分ごとに実行するようにスケジュールしますsession_information
。1日の終わりには、テーブルから好きなものをすべて見ることができます。
成功したログインと失敗したログインの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ポータルにアクセスするすべてのログインを一覧表示できます。
Sarvesh Kumar GuptaによるSQL ServerのGet Client IP Addressから:
CREATE FUNCTION [dbo].[GetCurrentIP] () RETURNS varchar(255) AS BEGIN DECLARE @IP_Address varchar(255); SELECT @IP_Address = client_net_address FROM sys.dm_exec_connections WHERE Session_id = @@SPID; Return @IP_Address; END