web-dev-qa-db-ja.com

専用管理者接続を使用したユーザーを見つける方法

専用管理接続を使用したユーザーを見つける方法はありますか?

アクティブな接続ではなく、すでに閉じられている以前の接続ですか?

3

SQL Serverはこの情報をどこにも保持しません。誰かがDACを乱用しているのを捕まえようとしている場合は、システム管理者を明らかにすべきではない人々から遠ざけるか、少なくともそれらを捕らえるためにある種のポーリングメカニズムを設定します。あなたはこのようなテーブルを持つことができます:

CREATE TABLE dbo.DBA_DacAccess
(
  ConnectTime      datetime,
  FirstObservance  datetime2 NOT NULL DEFAULT SYSUTCDATETIME(),
  LoginName        sysname,
  HostName         sysname,
  AppName          sysname,
  Interface        nvarchar(32),
  ClientNetAddress nvarchar(48)
);

そして、DAC接続に関する情報を収集するための適切な間隔を決定し、その頻度で(おそらくSQL Serverエージェントジョブを使用して)以下を実行します。

INSERT dbo.DBA_DacAccess
(
  ConnectTime, 
  LoginName, 
  HostName, 
  AppName, 
  Interface, 
  ClientNetAddress
)
SELECT 
  c.connect_time, 
  s.login_name, 
  s.[Host_name], 
  s.[program_name], 
  s.client_interface_name, 
  c.client_net_address
FROM sys.dm_exec_connections AS c 
INNER JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE c.endpoint_id = 1
AND NOT EXISTS 
(
  SELECT 1 FROM dbo.DBA_DacAccess 
  WHERE connect_time = c.connect_time
);

これは今後も機能しますが、すぐに出入りする場合はラッキー(または頻繁にポーリング)でキャッチする必要があるため、スケジュールを微調整する必要があります。また、これがLOGON TRIGGERではない理由に疑問がある場合は、次の2つの理由があります。(1)DACが設計上および必要に応じてこれらをバイパスする、および(2)これらのDMVの行/データが存在しないとにかくトリガーを逃れるまで。

過去のイベントについて、そして運が良ければ、SSMSからDACにアクセスしようとすると、失敗した試行がエラーログに書き込まれるため、SSMSからDACにアクセスしようとすると、バックグラウンド接続に噛まれてしまいます。メッセージの最後にIPアドレスが追加されます(ただし、他の情報は含まれません)。これは、誰かがサーバーに対してリモートデスクトップを使用した場合、または同じADMIN:資格情報を使用して追加の接続を確立しようとしないSSMS以外のアプリを使用した場合は役に立ちませんが、SSMSをリモートで使用した場合は役立つはずです。

2018年4月23日08:11:18
ログオン
わからない
最大数の「1」の専用管理者接続がすでに存在するため、接続できませんでした。新しい接続を行う前に、ログオフするかプロセスを終了することにより、既存の専用管理者接続をドロップする必要があります。 [クライアント:192.168.0.99]

16
Aaron Bertrand