Microsoft SQL Server の監査は、セキュリティ上の問題や侵害を特定するために非常に重要です。さらに、SQL Server の監査は、PCI DSS や HIPAA などの規制に準拠するための要件でもあります。
まずは、何を監査するのかを定義します。たとえば、ユーザーのログイン、サーバー設定、スキーマの変更、監査データの変更などを監査することができます。次に、どのセキュリティ監査機能を使用するかを選びます。役立つ機能には、次のようなものがあります:
- C2 の監査
- 一般的なコンプライアンス基準
- ログインの監査
- SQL Server の監査ing
- SQL トレース
- 拡張イベント(Extended Events)
- 変更データ キャプチャ(Change Data Capture)
- DML、DDL、およびログオン トリガー(DML, DDL, and Logon Triggers)
この記事は、C2 オーディティング(C2 auditing)、Common Compliance Criteria、および SQL Server Auditing の利用を検討しているデータベース管理者(DBA)向けです。第三者のオーディティング ツールについては扱いませんが、特に大規模な環境や規制のある業界では大いに役立つ場合があります。
C2 オーディティングと共通基準への準拠を有効化(Enabling C2 Auditing and Common Criteria Compliance)
現在 SQL Server を監査していない場合、最初に行うのに最も簡単なのは C2 監査を有効化することです。C2 監査は、SQL Server で有効にできる国際的に認められた標準です。ユーザーのログイン、ストアド プロシージャ、オブジェクトの作成および削除などのイベントを監査します。とはいえ「すべて」または「なし」の方式です。監査する内容を選択できず、大量のデータが生成される可能性があります。さらに、C2 監査はメンテナンス モードのため、将来の SQL Server のバージョンで削除される可能性が高いです。
Common Criteria Compliance は、C2 監査に取って代わる新しい標準です。欧州連合によって開発されており、SQL Server 2008 R2 以降の Enterprise および Datacenter エディションで有効化できます。とはいえ、追加のオーバーヘッドに対応するためのサーバー要件が十分でない場合、パフォーマンスの問題が発生する可能性があります。
SQL Server 2017 で C2 監査を有効化する方法は次のとおりです。
1. SQL Server Management Studio を開きます。
2. C2 監査を有効化したいデータベース エンジンに接続します。“サーバーへの接続(Connect to Server)” ダイアログで Server type が Database Engine に設定されていることを確認し、次に Connect をクリックします。
3. 左側の Object Explorer パネルで、上部にある SQL Server インスタンスを右クリックし、次に Properties をメニューから選択します。
4. Server Properties ウィンドウで、Security の Select a page の下をクリックします。
5. Security ページで、ログイン監視を構成できます。既定では、失敗したログインのみが記録されます。代わりに、成功したログインだけを監査することも、失敗と成功の両方のログインを監査することもできます。
図 1. アクセス監査の構成
6. Options の下で Enable C2 audit tracing を有効にします。
7. C2 Common Criteria Compliance の監査(auditing)を有効にする場合は、 Enable Common Criteria compliance を選択します。
Common Criteria(CC)Compliance は、1 から 7 までのさまざまな Evaluation Assurance Level(EAL)で実装できる柔軟な標準です。EAL が高いほど、検証プロセスはより厳格になります。 Enable Common Criteria compliance を SQL Server で有効にすると、CC Compliance EAL1 を有効化したことになります。EAL4+ 向けに SQL Server を手動で構成することも可能です。
CC Compliance を有効にすると、SQL Server の動作が変更されます。たとえば、テーブル レベルの DENY 権限が列レベルの GRANT より優先され、成功したログインと失敗したログインの両方が監査対象になります。さらに、Residual Information Protection(RIP)も有効になり、新しいリソースが使用する前に、メモリ割り当てをビット パターンで上書きします。
8. OK をクリックします。
9. 選択したオプションによっては、SQL Server の再起動を促すメッセージが表示される場合があります。このメッセージが表示されたら、警告ダイアログで OK をクリックします。C2 Common Criteria Compliance を有効にした場合は、サーバーを再起動してください。そうでない場合は、Object Explorer で SQL Server インスタンスをもう一度右クリックし、 Restart をメニューから選択します。警告ダイアログで Yes をクリックして、SQL Server を再起動することを確認します。
SQL Server の監査を有効化
SQL Server の監査は C2 の監査の代わりに有効にできます。さらに、両方を有効にすることも選択できます。SQL Server Audit オブジェクトは、サーバー レベルまたは SQL Server データベース レベルでイベントを収集するように構成できます。
サーバー監査オブジェクトを作成する
サーバー レベルの SQL Server 監査オブジェクトを作成しましょう:
1. 左側のオブジェクト エクスプローラー パネルで Security を展開します。
2. Audits を右クリックし、New Audit… をメニューから選択します。これにより、サーバー レベルの監査用に新しい SQL Server Audit オブジェクトが作成されます。
3. Create Audit ウィンドウで、監査設定に Audit name
4. On Audit Log Failure を使用して、SQL Server の監査が失敗した場合にどうするかを指定します。Continue を選択するか、監査対象のデータベース操作を停止する、またはサーバーをシャットダウンすることもできます。Fail operation を選択した場合、監査されないデータベース操作は引き続き動作します。
図 2. サーバー レベルの SQL Server 監査オブジェクトの作成
5. Audit destination のドロップダウン メニューで、SQL の監査トレースを書き込む先としてファイルを選択するか、Windows セキュリティ ログまたはアプリケーション イベント ログでイベントを監査するように選択できます。ファイルを選ぶ場合は、ファイルのパスを指定する必要があります。
Windows の Security イベント ログに書き込む場合、SQL Server に権限を付与する必要があります。分かりやすくするために、Application イベント ログを選択してください。さらに、監査オブジェクトの一部としてフィルターを含めることで、結果を絞り込むこともできます。フィルターは Transact-SQL(T-SQL)で記述する必要があります。
6. OK をクリックします。
7. これで、Object Explorer の「Audits」配下に新しい監査構成が表示されます。新しい監査構成を右クリックし、メニューから Enable Audit を選択します。
8. Close を「Enable Audit」ダイアログでクリックします。
データベース監査オブジェクトの作成
データベース レベルの監査用に SQL Server の監査オブジェクトを作成するには、手順が少し異なり、まず少なくとも 1 つのサーバー レベルの監査オブジェクトを作成する必要があります。
1. オブジェクト エクスプローラーで Databases を展開し、監査を構成したいデータベースを展開します。
2. Security フォルダーを展開し、Database Audit Specifications を右クリックして New Database Audit Specification… をメニューから選択します。
図 3. データベース レベルの監査用にサーバー監査仕様を作成する
3. [プロパティ] ウィンドウの [Actions] の下で、ドロップダウン メニューを使用して 1 つ以上の監査アクション タイプを構成します。監査したいステートメント(DELETE や INSERT など)、アクションが実行されるオブジェクト クラスなどを選択します。
4. 完了したら OK をクリックし、次に監査オブジェクトを右クリックして Enable Database Audit Specification を選択して監査オブジェクトを有効にします。
SQL Server の監査ログを表示する
C2 SQL Server の監査ログは、SQL Server インスタンスの既定のデータ ディレクトリに保存されます。各ログ ファイルの最大容量は 200 メガバイトです。上限に達すると、新しいファイルが自動的に作成されます。
SQL Server の監査ログを表示するために推奨されるネイティブ ソリューションが Log File Viewer です。使用するには、次の手順を実行します:
1. SQL Server Management Studio で、オブジェクト エクスプローラー(Object Explorer) ウィンドウの Security を展開します。そして
2. 表示したい監査(audit)対象を右クリックし、View Audit Logs をメニューから選択します。
3. Log File Viewer では、ログが右側に表示されます。ログがファイルに書き込まれる場合でも、Windows イベント ログに書き込まれる場合でも、Log File Viewer はログを表示します。
4. Log File Viewer の上部で Filter をクリックすると、表示するログ エントリをカスタマイズできます。SQL Server のファイル ログは .sqlaudit 形式で保存され、読み取れないため、Log File Explorer では Export をクリックして、ログをカンマ区切りの .log ファイル形式で保存できます。
図 4. Log File Viewer で SQL Server の監査(audit)ログを確認する
よくある質問(FAQ)
SQL Server の監査(audit)が有効になっているか確認する方法は?
SQL Server の監査(audit)が有効かどうかを確認するには、sys.dm_server_audit_status の動的管理ビュー(dynamic management view)をクエリするか、SQL Server Management Studio(SSMS)の Security フォルダーを確認します。SSMS で Security > Audits を展開すると、設定済みの監査がすべて表示され、現在の状態も確認できます。有効になっている監査は緑色のアイコンが表示され、無効になっている監査は赤色のアイコンが表示されます。監査ステータスをプログラムで確認するには、次のクエリも実行できます:
SELECT name, is_state_enabled FROM sys.server_audits
完全な監査(audit)カバレッジを得るには、サーバー監査とデータベース監査仕様(database audit specification の両方)を有効にする必要があります。Data security は、identity から始まる必要があり、誰がどのデータにアクセスしているのかを包括的に可視化することが求められます。そして、SQL Server の監査は、適切に設定・検証されている場合にその土台を提供します。
SQL Server の監査(audit)ファイルが非常に大きくなってしまうのはなぜですか?
監査ファイルが過度に増大するのは、通常、監査対象のイベント数が多すぎる場合、または適切なファイル管理設定を構成していない場合に起こります。最もよくある原因は、ALL の監査アクション グループを有効にすること、高トラフィックのテーブルに対する SELECT ステートメントを監査すること、もしくはローテーション(rotation)なしでファイルの無制限増加を設定することです。増加を抑えるには、コンプライアンス(compliance)で実際に必要なイベントだけを監査することに集中してください。通常は LOGIN_CHANGE_PASSWORD_GROUP, DATABASE_PERMISSION_CHANGE_GROUP、および機密性の高いテーブルに対する特定の DML 操作です。最大ファイル サイズの上限を設定し、MAXSIZE と MAX_ROLLOVER_FILES オプションでファイル ロールオーバー(file rollover)を有効にします。大量のイベントが発生する環境では、APPLICATION_LOG を FILE の代わりにターゲットとして使用することを検討するか、WHERE 句で監査フィルタリングを実装して不要なイベントの取り込みを減らしてください。スマートな監査とは、データノイズに溺れずに重要なものを追跡することです。
SQL Server の監査(audit)が開始できない場合のトラoubleshooting方法は?
SQL Server の監査(audit)が開始できない場合、問題は通常、ファイル権限、パスの到達性、または設定の競合に関連しています。まず、SQL Server サービス アカウントに、監査ファイルのディレクトリへの書き込み権限があることを確認してください。これは起動失敗の最も一般的な原因です。SQL Server のエラーログを確認して、具体的なエラーメッセージを探します。通常、その情報が問題の解決に向けた明確な手がかりを示します。対象ディレクトリが存在し、SQL Server インスタンスからアクセスできることを確認してください。特に、共有ストレージのパスがすべてのノードで有効である必要があるクラスタ環境では重要です。対象として Windows Application Log を使用する場合は、サービス アカウントに適切なイベント ログの書き込み権限があるかも確認します。重複した監査名や無効なファイル パスといった設定エラーも、起動を妨げます。ポイントは、手順立ててトラブルシューティングすることです。まず権限、次にパス、最後に設定の構文を確認してください。Netwrix は、このような一般的な落とし穴をなくす集中監査管理を提供することで、こうした複雑さを簡素化します。
SQL Server の監査(auditing)にはどの程度のパフォーマンス影響がありますか?
SQL Server の監査(auditing)は、正しく設定すればパフォーマンスへの影響は最小限で、ほとんどの環境では通常 2〜5% 程度のオーバーヘッドが追加されるにとどまります。実際の影響は、次の 3 つの重要な要因に依存します。どのイベントを監査するか、どのくらいの頻度で発生するか、そしてストレージ サブシステムの性能です。繁忙な OLTP システムで SELECT 文のような高頻度の処理を監査すると、ログイン、権限変更、重要なテーブルに対する DML 操作などのセキュリティ関連イベントに注目する場合よりも、より大きなオーバーヘッドが発生します。非同期の監査ターゲット(デフォルト)は同期オプションよりもパフォーマンスが良い一方で、イベント記録はわずかに遅延します。影響を最小化するには、WHERE 句を使った監査フィルタリングを利用し、不必要なシステム操作の監査は避け、監査ファイルの保存先ストレージに十分な I/O 容量があることを確認してください。大量のデータが発生するシナリオでは、Extended Events は一般に SQL Server Audit よりもオーバーヘッドが低い傾向がありますが、SQL Server Audit は優れたコンプライアンス機能と管理のしやすさを提供します。賢い監査設計は、包括的なログ記録よりもセキュリティ上の価値に重点を置きます。つまり、性能を麻痺させることなく保護につながる可視性が必要です。
SQL Server の監査(audit)と SQL Trace:どちらを使うべきですか?
SQL Server Audit は新しい導入における現代的な選択肢である一方、SQL Trace は非推奨(deprecated)となっており、新規プロジェクトでは避けるべきです。SQL Server Audit は、従来の SQL Trace 機能と比べて、より優れたセキュリティ、パフォーマンス、および管理機能を提供します。SQL Trace と異なり、SQL Server Audit のイベントはユーザー(sysadmins を含む)によって変更または削除できないため、コンプライアンス要件に対する監査(audit)の完全性が保証されます。監査フレームワークは、より良いパフォーマンスのための非同期処理、内蔵されたフィルタリング機能、そして Windows Security Event Log との統合を提供します。SQL Trace は、保存プロシージャを用いた手動コーディングが必要であり、将来の SQL Server バージョンで削除される予定としてマークされています。Extended Events は、SQL Trace の診断機能に対する推奨の置き換えであり、一方で SQL Server Audit はセキュリティとコンプライアンスの監視を担います。現在、セキュリティ監査のために SQL Trace を使用している場合は、すぐに SQL Server Audit へ移行してください。SQL Server Audit は、真にデータセキュリティが求める改ざん不可能な監査トレイルを提供します。Netwrix のソリューションは、こうしたネイティブの監査機能を基盤として、データ環境全体にわたる集中型の可視性を提供します。
共有する
もっと詳しく
著者について
Russell Smith
ITコンサルタント
管理およびセキュリティ技術を専門とする IT コンサルタント兼著者です。Russell は IT 分野で 15 年以上の経験があり、Windows セキュリティに関する書籍を執筆し、Microsoft の Official Academic Course(MOAC)シリーズ向けの教材も共著しています。