Share via


SQL Server Audit (データベース エンジン)

SQL Server データベース エンジンのインスタンスや個々のデータベースの監査では、データベース エンジンで発生するイベントの追跡およびログ記録が行われます。 SQL Server の監査では、サーバー レベルのイベント用のサーバー監査仕様とデータベース レベルのイベント用のデータベース監査仕様を含めることができる、サーバー監査を作成できます。 監査イベントは、イベント ログまたは監査ファイルに書き込むことができます。

SQL Server では、個々のインストール環境についての政府や標準による要件に応じて、複数のレベルの監査を使用できます。 SQL Server 監査には、サーバーおよびデータベースのさまざまなオブジェクトの監査を有効化、保存、および表示するためのツールとプロセスが用意されています。

サーバー監査アクション グループをインスタンスごとに、データベース監査アクション グループまたはデータベース監査アクションをデータベースごとに、それぞれ記録できます。 監査可能なアクションが検出されるたびに監査イベントが発生します。

SQL Server のすべてのエディションでサーバー レベルの監査がサポートされます。 データベース レベルの監査は、Enterprise、Developer、および Evaluation Edition に限定されています。 詳細については、「SQL Server 2012 の各エディションがサポートする機能」を参照してください。

SQL Server 監査のコンポーネント

監査では、複数の要素が、サーバー アクションやデータベース アクションの特定のグループのための 1 つのパッケージに組み合わされています。 レポート定義がグラフィックやデータ要素と組み合わされてレポートが生成されるように、SQL Server 監査の複数のコンポーネントが組み合わされて、監査と呼ばれる出力が生成されます。

SQL Server 監査では、拡張イベントを使用して監査を作成します。 拡張イベントの詳細については、「拡張イベント」を参照してください。

SQL Server 監査

SQL Server 監査オブジェクトは、監視するサーバー レベルまたはデータベース レベルのアクションおよびアクションのグループの 1 つのインスタンスを収集します。 監査は SQL Server インスタンス レベルで行われます。 SQL Server のインスタンスごとに複数の監査を使用できます。

監査を定義する場合、結果を出力する場所を指定します。 これが監査の出力先です。 監査は無効な状態で作成されるため、アクションの監査は自動的には行われません。 監査を有効にすると、監査の出力先が監査からデータを受け取るようになります。

サーバー監査の仕様

サーバー監査の仕様オブジェクトは監査に属しています。 サーバー監査の仕様は監査ごとに 1 つ作成できます。これは、サーバー監査の仕様も監査も SQL Server インスタンスのスコープで作成されるためです。

サーバー監査の仕様は、拡張イベント機能によって発生するさまざまなサーバー レベルのアクション グループを収集します。 サーバー監査の仕様には、監査アクション グループを含めることができます。 監査アクション グループとは、データベース エンジンで発生するアトミック イベントであるアクションの定義済みのグループです。 これらのアクションは監査に送信されて、ターゲットに記録されます。

サーバー レベルの監査アクション グループの詳細については、「SQL Server 監査のアクション グループとアクション」を参照してください。

データベース監査の仕様

Database Audit Specification オブジェクトも、SQL Server 監査に属しています。 各監査では SQL Server データベースごとに 1 つのデータベース監査の仕様を作成できます。

データベース監査の仕様は、拡張イベント機能によって発生するデータベース レベルの監査アクションを収集します。 データベース監査の仕様には、監査アクション グループまたは監査イベントを追加することができます。監査イベントとは、SQL Server エンジンで監査できるアトミックなアクションです。 監査アクション グループとは、アクションの定義済みのグループです。 これらはいずれも、SQL Server データベースのスコープにあります。 これらのアクションは監査に送信されて、ターゲットに記録されます。ユーザーのデータベース監査の仕様に、システム ビューなどのサーバー スコープ オブジェクトは含めないでください。

データベース レベルの監査アクション グループと監査アクションの詳細については、「SQL Server 監査のアクション グループとアクション」を参照してください。

ターゲット

監査の結果はターゲットに送信されます。ターゲットには、ファイル、Windows セキュリティ イベント ログ、または Windows アプリケーション イベント ログを使用できます。 定期的にログをレビューおよびアーカイブして、ターゲットに追加のレコードを書き込むための十分なスペースを確保しておく必要があります。

重要な注意事項重要

Windows アプリケーション イベント ログの読み取りおよび書き込みは、認証されているユーザーならだれでも行うことができます。 アプリケーション イベント ログでは、Windows セキュリティ イベント ログほど高いアクセス許可は要求されません。したがって、Windows セキュリティ イベント ログに比べてセキュリティが低くなります。

Windows セキュリティ ログへの書き込みを行うには、"セキュリティ監査の生成" ポリシーに SQL Server サービス アカウントを追加する必要があります。 既定では、ローカル システム、ローカル サービス、およびネットワーク サービスがこのポリシーに追加されています。この設定は、セキュリティ ポリシー スナップイン (secpol.msc) を使用して構成できます。 さらに、"オブジェクト アクセスの監査" セキュリティ ポリシーを、"成功" と "失敗" の両方について有効にする必要があります。 この設定は、セキュリティ ポリシー スナップイン (secpol.msc) を使用して構成できます。 Windows Vista または Windows Server 2008 では、コマンド ラインから監査ポリシー プログラム (AuditPol.exe) を使用して、より細かい application generated ポリシーを設定できます。 Windows セキュリティ ログへの書き込みを有効にする手順の詳細については、「セキュリティ ログへの SQL サーバー監査イベントの書き込み」を参照してください。 Auditpol.exe プログラムの詳細については、サポート技術情報の記事 921469「グループ ポリシーを使用して、Windows Server 2003 ドメインまたは Windows 2000 ドメインにある Windows Vista クライアント コンピューターのセキュリティの監査の詳細設定を構成する方法」を参照してください。Windows イベント ログは、すべての Windows オペレーティング システムで使用できます。 Windows イベント ログの詳細については、「イベント ビューアーの概要」を参照してください。監査でより厳密なアクセス許可が必要な場合は、バイナリ ファイル ターゲットを使用します。

改ざんを防止するために監査情報をファイルに保存している場合、次の方法でそのファイルの場所へのアクセスを制限できます。

  • SQL Server サービス アカウントには、読み取り権限と書き込み権限の両方が必要です。

  • 通常、監査管理者には、読み取り権限と書き込み権限が必要です。 これは、監査管理者が監査ファイルを管理 (他の共有への監査ファイルのコピー、監査ファイルのバックアップなど) するための Windows アカウントであることを前提としています。

  • 監査ファイルの読み取りが許可されている監査リーダーには、読み取り権限が必要です。

データベース エンジンがファイルへの書き込みを行っているときでも、他の Windows ユーザーは、権限を持っていれば、監査ファイルを読み取ることができます。 排他ロックを取得すると読み取り操作が行われないようになりますが、データベース エンジンでは排他ロックを取得しません。

データベース エンジンは監査ファイルにアクセスできるため、CONTROL SERVER 権限を持っている SQL Server ログインは、データベース エンジンを利用して監査ファイルにアクセスできます。 監査ファイルの読み取りを行っているユーザーを記録するには、master.sys.fn_get_audit_file に監査を定義します。 これにより、SQL Server を介して監査ファイルにアクセスした、CONTROL SERVER 権限を持つログインが記録されます。

監査管理者が別の場所に監査ファイルをコピーする場合 (アーカイブ用など)、新しい場所に対する ACL は、次の権限に限定する必要があります。

  • 監査管理者 – 読み取り/書き込み

  • 監査リーダー – 読み取り

監査管理者または監査リーダーしかアクセスしない、別の SQL Server インスタンス (SQL Server Express のインスタンスなど) から監査レポートを作成することをお勧めします。 レポート作成用に別のデータベース エンジンのインスタンスを使用することで、許可されていないユーザーによる監査レコードへのアクセスを防ぐことができます。

Windows BitLocker ドライブ暗号化または Windows 暗号化ファイル システムを使用して監査ファイルが格納されているフォルダーを暗号化することにより、許可されていないアクセスに対する保護を強化することができます。

ターゲットに書き込まれる監査レコードの詳細については、「SQL Server 監査レコード」を参照してください。

SQL Server 監査の使用の概要

監査は、SQL Server Management Studio または Transact-SQL を使用して定義することができます。 監査を作成して有効にすると、ターゲットがエントリを受け取るようになります。

Windows イベント ログを閲覧するには、Windows のイベント ビューアー ユーティリティを使用します。 ファイル ターゲットの場合は、SQL Server Management Studio の [ログ ファイルの表示] か、fn_get_audit_file 関数を使用して、対象のファイルを閲覧できます。

監査の作成および使用の一般的な手順は次のとおりです。

  1. 監査を作成し、ターゲットを定義します。

  2. 監査にマップするサーバー監査の仕様またはデータベース監査の仕様を作成します。 その監査の仕様を有効にします。

  3. 監査を有効にします。

  4. Windows イベント ビューアー[ログ ファイルの表示]、または fn_get_audit_file 関数を使用して、監査イベントを閲覧します。

詳細については、「サーバー監査およびサーバー監査の仕様を作成する方法」および「サーバー監査の仕様およびデータベース監査の仕様を作成する方法」を参照してください。

考慮事項

監査の開始時にエラーが発生すると、サーバーが起動しなくなります。 その場合にサーバーを起動するには、コマンド ラインで –f オプションを使用します。

監査に対して ON_FAILURE=SHUTDOWN が指定されているために監査エラーによってサーバーがシャットダウンしたり起動しなくなったりすると、MSG_AUDIT_FORCED_SHUTDOWN イベントがログに書き込まれます。 シャットダウンはこの設定が初めて検出されたときに生じるため、このイベントが書き込まれるのは 1 回だけです。 このイベントは、シャットダウンを引き起こした監査のエラー メッセージの後に書き込まれます。 監査によって引き起こされるシャットダウンを回避するには、–m フラグを使用して SQL Server をシングル ユーザー モードで起動します。 シングル ユーザー モードで起動すると、ON_FAILURE=SHUTDOWN が指定されているすべての監査がダウングレードされて、そのセッションでは ON_FAILURE=CONTINUE として実行されます。–m フラグを使用して SQL Server を起動すると、エラー ログに MSG_AUDIT_SHUTDOWN_BYPASSED メッセージが書き込まれます。

サービスのスタートアップ オプションの詳細については、「データベース エンジン サービスのスタートアップ オプション」を参照してください。

定義済みの監査を含むデータベースのアタッチ

監査の仕様が含まれていて、サーバーに存在しない GUID が指定されているデータベースをアタッチすると、孤立した監査の仕様が発生します。 この場合は、一致する GUID を持つ監査がサーバー インスタンスに存在しないため、監査イベントは記録されません。 この状況を修正するには、ALTER DATABASE AUDIT SPECIFICATION コマンドを使用して、孤立した監査の仕様を既存のサーバー監査に関連付けます。 または、CREATE SERVER AUDIT コマンドを使用して、指定されている GUID を持つ新しい Server 監査を作成します。

監査の仕様が定義されているデータベースを、SQL Server 監査をサポートしていない別のエディションの SQL Server (SQL Server Express など) にアタッチすることもできますが、監査イベントは記録されません。

データベース ミラーリングと SQL Server 監査

データベース監査の仕様が定義されていて、データベース ミラーリングを使用するデータベースには、そのデータベース監査の仕様が含まれます。 ミラー化された SQL インスタンスでも正しく機能するようにするには、以下の項目を構成する必要があります。

  • データベース監査の仕様が監査レコードを書き込めるようにするには、同じ GUID を持つ監査をミラー サーバーに作成する必要があります。 これは、CREATE AUDIT WITH GUID= <GUID from source Server Audit> コマンドを使用して構成できます。

  • バイナリ ファイル ターゲットの場合は、監査記録が書き込まれる場所に対する適切なアクセス許可がミラー サーバーのサービス アカウントに必要です。

  • Windows イベント ログ ターゲットの場合は、ミラー サーバーが配置されているコンピューターのセキュリティ ポリシーで、セキュリティ イベント ログまたはアプリケーション イベント ログへのサービス アカウントのアクセスが許可されている必要があります。

監査管理者

sysadmin 固定サーバー ロールのメンバーは、各データベースで dbo ユーザーとして認識されます。 管理者のアクションを監査するには、dbo ユーザーのアクションを監査します。

Transact-SQL を使用した監査の作成と管理

DDL ステートメント、動的管理ビューと関数、およびカタログ ビューを使用して、SQL Server 監査のすべての機能を実装できます。

データ定義言語ステートメント

以下の DDL ステートメントを使用して、監査の仕様を作成、変更、および削除することができます。

ALTER AUTHORIZATION

CREATE SERVER AUDIT

ALTER DATABASE AUDIT SPECIFICATION

CREATE SERVER AUDIT SPECIFICATION

ALTER SERVER AUDIT

DROP DATABASE AUDIT SPECIFICATION

ALTER SERVER AUDIT SPECIFICATION

DROP SERVER AUDIT

CREATE DATABASE AUDIT SPECIFICATION

DROP SERVER AUDIT SPECIFICATION

動的ビューと関数

次の表に、SQL Server 監査に使用できる動的ビューと関数の一覧を示します。

動的ビューと関数

説明

sys.dm_audit_actions

監査ログで報告される可能性のあるすべての監査アクション、および SQL Server Audit の一部として構成できるすべての監査アクション グループに対して 1 つの行を返します。

sys.dm_server_audit_status

監査の現在の状態に関する情報を提供します。

sys.dm_audit_class_type_map

監査ログ内の class_type フィールドを、sys.dm_audit_actions 内の class_desc フィールドにマップするテーブルを返します。

fn_get_audit_file

サーバー監査で作成された監査ファイルからの情報を返します。

カタログ ビュー

次の表に、SQL Server 監査に使用できるカタログ ビューの一覧を示します。

カタログ ビュー

説明

sys.database_ audit_specifications

サーバー インスタンス上の SQL Server 監査に含まれるデータベース監査仕様に関する情報を含みます。

sys.database_audit_specification_details

すべてのデータベースについてサーバー インスタンス上の SQL Server 監査に含まれる、データベース監査仕様に関する情報を含みます。

sys.server_audits

サーバー インスタンス内の各 SQL Server 監査について行を 1 つずつ含みます。

sys.server_audit_specifications

サーバー インスタンス上の SQL Server 監査に含まれるサーバー監査仕様に関する情報を含みます。

sys.server_audit_specifications_details

サーバー インスタンス上の SQL Server 監査に含まれるサーバー監査仕様の詳細 (アクション) に関する情報を含みます。

sys.server_file_audits

サーバー インスタンス上の SQL Server 監査に含まれるファイル監査の種類に関する拡張情報を含みます。

権限

SQL Server 監査の各機能とコマンドには、個別の権限要件があります。

サーバー監査またはサーバー監査の仕様を作成、変更、削除する場合、サーバー プリンシパルには、ALTER ANY SERVER AUDIT または CONTROL SERVER の権限が必要です。 データベース監査の仕様を作成、変更、削除する場合、データベース プリンシパルには、ALTER ANY DATABASE AUDIT 権限、またはデータベースに対する ALTER 権限か CONTROL 権限が必要です。 さらに、プリンシパルには、データベースに接続する権限、または ALTER ANY SERVER AUDIT 権限か CONTROL SERVER 権限が必要です。

特に指定がない限り、カタログ ビューを表示する場合、プリンシパルに次のいずれかのロールまたは権限が必要です。

  • 固定サーバー ロール sysadmin のメンバーシップ。

  • CONTROL SERVER 権限。

  • VIEW SERVER STATE 権限。

  • ALTER ANY AUDIT 権限。

  • VIEW AUDIT STATE 権限 (sys.server_audits カタログ ビューにアクセスするプリンシパルのみに付与)。

動的管理ビューを使用するには、プリンシパルに VIEW SERVER STATE または ALTER ANY AUDIT 権限が必要です。

アクセス権および権限を付与する方法の詳細については、「GRANT (Transact-SQL)」を参照してください。

注記注意

sysadmin ロールのプリンシパルによって監査コンポーネントが勝手に書き換えられることも、db_owner ロールのプリンシパルによってデータベース内の監査の仕様が勝手に書き換えられることもないとはいえません。 SQL Server 監査では、監査の仕様を作成または変更するログオンが、ALTER ANY DATABASE AUDIT 以上の権限を持っているかどうかが検証されます。 ただし、データベースにアタッチするときには検証は行われません。 すべてのデータベース監査の仕様は、sysadmin ロールまたは db_owner ロールのプリンシパルと同等の信頼性しかないと見なす必要があります。

関連タスク

サーバー監査およびサーバー監査の仕様を作成する方法

サーバー監査の仕様およびデータベース監査の仕様を作成する方法

SQL Server 監査ログの表示

セキュリティ ログへの SQL サーバー監査イベントの書き込み

監査と密接に関連したトピック

関連項目

概念

SQL Server 監査のアクション グループとアクション

SQL Server 監査レコード