web-dev-qa-db-ja.com

SQL Server:すべての接続/切断を追跡する

Microsoft SQL Server 2008r2 SP1を持っています。

データベースに接続するユーザーとデータベースから切断するユーザーを知る必要があります。

理想的には、(日時、ユーザー名、接続/切断)のリストが必要です。

これは拡張イベントを使用して実行できますか?またはより良い方法はありますか?

2
carlo.borreo

ここでは、ログインとログアウトの監査に使用したいくつかのオプションの概要を示します。まだ監査目的で拡張イベントを使用する機会がありませんでした。以下では、SQL ServerトレースとSQL Server監査を使用したログインイベントとログアウトイベントの追跡について簡単に説明します。以下で簡単に説明するバックグラウンドサーバートレースを設定することになるでしょう。さらに詳しく説明する必要がある場合は、遠慮なく質問してください。

デフォルトトレース

デフォルトのトレースは、何も変更せずにサーバー上のアクティビティを監査する1つの方法です。デフォルトのトレースから何を得ることができるかについての投稿が提供されます here

サーバートレース

ログイン/ログアウト情報を探しているだけの場合は、SQL Serverプロファイラを使用してログインとログアウトを監査するための独自のサーバートレースを作成することもできます。新しいトレースを作成し、それをSQL Serverトレース定義ファイルとしてエクスポートするだけです。

  1. SQL Serverプロファイラを開く
  2. 空のテンプレートを使用して新しいトレースを作成する
  3. イベント選択タブに移動します
  4. [セキュリティ監査]で、[監査ログイン]と[監査ログアウト]を確認します

トレースを実行して停止し、[ファイル]でトレースをSQL Serverトレース定義ファイルとしてエクスポートできます。次に、そのトレースをバックグラウンドで実行し、後でsqlサーバーテーブルにインポートできるファイルに保存できます。

プロファイラーによって作成されたサンプルサーバートレースの一部

-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
set @maxfilesize = 5 

exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL 
if (@rc != 0) goto error

-- Client side File and Table cannot be scripted

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 14, 1, @on
exec sp_trace_setevent @TraceID, 14, 9, @on
exec sp_trace_setevent @TraceID, 14, 2, @on
exec sp_trace_setevent @TraceID, 14, 66, @on
exec sp_trace_setevent @TraceID, 14, 10, @on
.....
-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1

-- display trace id for future references
select TraceID=@TraceID
goto finish

これは、これらのアイテムをキャプチャしただけの出力です

enter image description here

サーバートレースを拡張イベントセッションに変換することは可能であり、それについて詳しく説明します ここ

サーバー監査

データベース/サーバーレベルのイベントを追跡および監視できるサーバー監査もあります。 監査はEntrepriseとDatacenterのエディションでのみ利用できる場合がありますBooks Onlineで特定の記事に別のことを言っているようには見えません。

USE MASTER
GO

CREATE SERVER AUDIT audit_test                                           
TO FILE (FILEPATH = 'D:\Audit')
GO


CREATE SERVER AUDIT SPECIFICATION audit_test_spec       
FOR SERVER AUDIT [audit_test]
ADD (FAILED_LOGIN_GROUP),
ADD (SUCCESSFUL_LOGIN_GROUP)
WITH (STATE=ON)
GO

次に、[セキュリティ]-> [監査]に移動して、SSMSでサーバー監査イベントを表示できます。次に、コンテキストメニューを使用して、[監査ログの表示]を選択し、アクティビティを確認できます

enter image description here

enter image description here

監査の詳細については、ここに追加情報があります。

サーバー監査の作成(Transact-SQL)

CREATE SERVER AUDIT SPECIFICATION(Transact-SQL)

CREATE DATABASE AUDIT SPECIFICATION(Transact-SQL)

6
Craig Efrein