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

適用対象: SQL ServerAzure SQL Managed Instance

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

重要

Azure SQL Managed Instance では、この T-SQL 機能の特定の動作が変更されています。 すべての T-SQL の動作変更の詳細については、Azure SQL Managed Instance の T-SQL の SQL Server との相違点に関する記事を参照してください。

インストールに対する政府や標準の要件に応じて、SQL Server には複数のレベルの監査があります。 SQL Server 監査では、さまざまなサーバーおよびデータベース オブジェクトで監査を有効化、格納、表示するために必要なツールとプロセスが提供されます。

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

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

注意

このトピックの対象は、SQL Server です。 SQL データベースについては、「SQL Database 監査の開始」を参照してください。

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

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

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

SQL Server Audit

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) を使用して、より細かいアプリケーション生成のポリシーを設定できます。 Windows セキュリティ ログへの書き込みを有効にする手順の詳細については、「 セキュリティ ログへの SQL サーバー監査イベントの書き込み」を参照してください。 Auditpol.exe プログラムの詳細については、 グループ ポリシーを使用して詳細なセキュリティの監査を構成する方法に関するサポート技術情報の記事 921469 を参照してください。 Windows イベント ログは、すべての Windows オペレーティング システムで使用できます。 Windows イベント ログの詳細については、「 イベント ビューアーの概要」を参照してください。 監査でより厳密なアクセス許可が必要な場合は、バイナリ ファイル ターゲットを使用します。

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

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

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

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

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

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

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

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

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

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

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

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

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> コマンドを使用して構成できます。

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

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

監査管理者

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

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

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

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

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

DDL ステートメント 説明
ALTER AUTHORIZATION セキュリティ保護可能なエンティティの所有権を変更します。
ALTER DATABASE AUDIT SPECIFICATION SQL Server Audit 機能を使用して、データベース監査仕様オブジェクトを変更します。
ALTER SERVER AUDIT SQL Server Audit 機能を使用して、サーバー監査オブジェクトを変更します。
ALTER SERVER AUDIT SPECIFICATION SQL Server Audit 機能を使用して、サーバー監査仕様オブジェクトを変更します。
CREATE DATABASE AUDIT SPECIFICATION SQL Server Audit 機能を使用して、データベース監査仕様オブジェクトを作成します。
CREATE SERVER AUDIT SQL Server Audit を使用して、サーバー監査オブジェクトを作成します。
CREATE SERVER AUDIT SPECIFICATION SQL Server Audit 機能を使用して、サーバー監査仕様オブジェクトを作成します。
DROP DATABASE AUDIT SPECIFICATION SQL Server Audit 機能を使用して、データベース監査仕様オブジェクトを削除します。
DROP SERVER AUDIT SQL Server の監査機能を使用して、サーバー監査オブジェクトを削除します。
DROP SERVER AUDIT SPECIFICATION SQL Server Audit 機能を使用して、サーバー監査仕様オブジェクトを削除します。

動的ビューと関数

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

動的ビューと関数 説明
sys.dm_audit_actions 監査ログで報告される可能性のあるすべての監査アクション、および SQL Server 監査の一部として構成できるすべての監査アクション グループに対して 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 権限が必要です。

VIEW ANY DEFINITION 権限では、サーバー レベルの監査ビューを表示できます。また、VIEW DEFINITION 権限では、データベース レベルの監査ビューを表示できます。 これらの権限を拒否すると、プリンシパルが ALTER ANY SERVER AUDIT 権限または ALTER ANY DATABASE AUDIT 権限を付与されている場合でも、カタログ ビューを表示する機能がオーバーライドされます。

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

注意

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

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

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

SQL Server 監査ログを表示する

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

[サーバーのプロパティ] ([セキュリティ] ページ)
SQL Server のログインの監査をオンにする方法について説明します。 監査レコードは Windows アプリケーション ログに格納されます。

c2 audit mode サーバー構成オプション
SQL Server の C2 セキュリティ準拠の監査モードについて説明します。

Security Audit イベント カテゴリ (SQL Server Profiler)
SQL Server Profiler で使用できる監査イベントについて説明します。 詳細については、「 SQL Server Profiler」を参照してください。

SQL トレース (SQL Trace)
SQL トレースを使用して、SQL Server Profiler からではなく、ユーザー独自のアプリケーションからトレースを手動で作成する方法について説明します。

DDL トリガー
データ定義言語 (DDL) トリガーを使用してデータベースの変更を追跡する方法について説明します。

Microsoft TechNet: SQL Server TechCenter: SQL Server 2005 - セキュリティと保護
SQL Server セキュリティに関する最新の情報を提供します。

参照

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