SQL Server監査機能:SQL トレース

概要

SQL Server Profilerツールで、SQLの実行を監視する機能をストアドから実行できるという機能。
こちらは SQL Server 2008 以下でもフィルタをかけるて必要な箇所のみアクセスログを残すことが出来る。
結果は、トレース作成時に指定した*.trcファイルに保存される。それをSQLServerのシステム関数でテーブルであるかのように読める。
ただしこれは継続的な監査を目的とした機能ではないので、サーバ起動ごとに毎回トレースを仕掛ける処理を登録してやる必要がある。
(トレースは永続的な設定ではないため、インスタンス再起動時に改めて作成する必要がある。)

いちおう、利用目的の中に監査というのも入っている

https://technet.microsoft.com/ja-jp/library/ms190378(v=sql.105).aspx

登録方法

SQL Server Profiler のGUIで作成したトレース定義をSQLに書き出して、それを元に登録プロシージャを作成する。

SQL Server Management Studio→ツール→SQL Server Profiler 

トレースのプロパティ→イベントの選択
	全てのイベントを表示するチェックON
	Security Audit→Audit Schema Object Access のみチェックONにする
	すべての列を表示チェックON
	列フィルタ
		DataBaseName: 次のパターンに一致する → 利用するDB
		OwnerName   : 等しい → dbo
		IsSystem    : 等しい → 0
		LoginName   : 次のパターンに一致しない → システムで利用するユーザ
	実行

ファイル→エクスポート→トレースの定義……でSQLとして書き出す。

書き出したSQLを元に修正をして、「トレースを作成してトレースを起動する」プロシージャを作成する。

監査ログを確認する方法

以下のようなSQLで、テーブルとして取得ができる。

select * from fn_trace_gettable(N'C:\LOG\trace.trc', default);

SQLトレースの負荷について

ほぼ影響はないと思われる。SQL Server Audit よりは影響が大きい。
http://download.microsoft.com/download/F/1/0/F10BC023-9396-4D67-BAC9-7C43AE954BF4/CQI_compliance_guideline2008.pdf

プロセッサ利用率      : 71.6%(トレースなし) → 76.4%(トレースあり)
秒あたりのトランザクション量:100.0%(トレースなし) → 89.5%(トレースあり)