特定のSQL ServerにアクセスするすべてのIPまたはユーザーを検索する


10

SQLサーバーを見つけたが、どのアプリケーションがそれに接続しているかがわからないとします。多分私は1つのアプリケーションを見つけますが、それがそれを使用している唯一のアプリケーションかどうかはわかりません。

すべての異なる接続を見つける良い方法はありますか?

回答:


14

SSMSで現在実行中のプロセスをアクティビティモニターで確認できます。

また、それが使用して取得することができますsys.dm_exec_sessionsなどsys.dm_exec_connectionssys.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_timelast_successful_logon

登録しようとIPおよびその他の情報を取得することができますsys.dm_exec_connectionssession_idclient_net_addresslocal_net_addressconnect_time、ポート、...

sys.dm_exec_requestsも有用な情報を提供できます:commandタイプsql_handle、...

このクエリは単なるサンプルです。あなた必要がありJOIN、これらの3つのビュー一緒にし、それらのいずれかからの出力/店舗関連情報。

SQL Serverを再起動すると、これらのビューのデータが消えます。したがって、アプリケーションが定期的に接続されていない場合は、ジョブまたはスクリプト(Powershell)を使用して定期的にアプリケーションを保存することをお勧めします。


3

Julienの提案もお勧めしますが、SQL Serverエージェントを使用してクエリのスケジュールを設定する方がよいでしょう。実行するたびに、情報を物理テーブルにダンプします。2つのDMVが結合されsys.dm_exec_connectionssys.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日の終わりには、テーブルから好きなものをすべて見ることができます。


2

成功したログインと失敗したログインの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ポータルにアクセスするすべてのログインを一覧表示できます。


-2

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

これは、それを実行している接続のclient_net_addressを返します。これは場合によっては便利ですが、ここでは必要ありません。特に、不明なアプリケーションがこの関数を呼び出さないためです。
Julien Vavasseur
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.