applies to:SQL Server
Azure SQL Managed Instance
Auditing SQL Server データベース エンジンまたは個々のデータベースのインスタンスには、データベース エンジンで発生するイベントの追跡とログ記録が含まれます。 SQL Server監査を使用すると、サーバー監査を作成できます。この監査には、サーバー レベルのイベントのサーバー監査仕様と、データベース レベルのイベントのデータベース監査仕様を含めることができます。 監査イベントは、イベント ログまたは監査ファイルへ書き込むことができます。
インストールの政府機関または標準の要件に応じて、SQL Serverの監査にはいくつかのレベルがあります。 SQL Server監査には、さまざまなサーバー オブジェクトとデータベース オブジェクトに対する監査を有効にし、保存し、表示するために必要なツールとプロセスが用意されています。
サーバー監査アクション グループをインスタンスごとに、データベース監査アクション グループまたはデータベース監査アクションをデータベースごとに、それぞれ記録できます。 監査可能なアクションが検出されるたびに監査イベントが発生します。
この記事は、SQL ServerとAzure SQL Managed Instanceに適用されます。
- SQL Serverのすべてのエディションでは、サーバー レベルの監査がサポートされます。 Service Pack 1 以降のバージョンの SQL Server 2016 (13.x) では、すべてのエディションでデータベース レベルの監査がサポートされています。 2016 SQL Server (13.x) より前は、データベース レベルの監査は Enterprise、Developer、Evaluation の各エディションに制限されていました。 詳細については、「Editions and supported features of SQL Server 2016を参照してください。
- Azure SQL Managed Instanceでは、SQL Server監査がサポートされており、Azure SQL Managed Instance内のデータベースとSQL Server内のデータベースの間には
の違いがあります。 - SQL データベースについては、Azure SQL Database の監査を参照してください。
SQL Server の監査コンポーネント
監査 では、複数の要素が、サーバー アクションやデータベース アクションの特定のグループのための 1 つのパッケージに組み合わされています。 SQL Server監査結合のコンポーネントは、グラフィックスおよびデータ要素と組み合わされたレポート定義がレポートを生成するのと同様に、監査と呼ばれる出力を生成します。
SQL Server監査では、Extended Events を使用して監査を作成します。 拡張イベントの詳細については、「 拡張イベントの概要」を参照してください。
SQL Server監査
SQL Server Audit オブジェクトは、監視するサーバーレベルのアクションまたはデータベース レベルのアクションとアクションのグループの単一のインスタンスを収集します。 監査は、SQL Server インスタンス レベルです。 SQL Serverインスタンスごとに複数の監査を行うことができます。
監査を定義する場合、結果を出力する場所を指定します。 これが監査の対象です。 監査は無効な状態で作成されるため、アクションの監査は自動的には行われません。 監査を有効にすると、監査先が監査データを受け取るようになります。
サーバー監査の仕様
サーバー監査の仕様 オブジェクトは監査に属しています。 両方ともSQL Serverインスタンス スコープで作成されるため、監査ごとに 1 つのサーバー監査仕様を作成できます。
サーバー監査の仕様は、拡張イベント機能によって発生するさまざまなサーバー レベルのアクション グループを収集します。 サーバー監査の仕様には、 監査アクション グループ を含めることができます。 監査アクション グループは、データベース エンジンで発生するアトミック イベントであるアクションの定義済みグループです。 これらのアクションは監査に送信されて、ターゲットに記録されます。
サーバー レベルの監査アクション グループについては、SQL Server監査アクション グループとアクションに関する記事を参照してください。
注記
パフォーマンスの制約により、 tempdb テーブルと一時テーブルは監査されません。 バッチ完了アクション グループは、一時テーブルに対してステートメントをキャプチャしますが、オブジェクト名が正しく設定されない可能性があります。 ただし、ソース テーブルは常に監査され、ソース テーブルから一時テーブルへのすべての挿入が確実に記録されます。
データベース監査の仕様
Database Audit Specification オブジェクトもSQL Server監査に属しています。 監査ごとに、SQL Server データベースごとに 1 つのデータベース監査仕様を作成できます。
データベース監査の仕様は、拡張イベント機能によって発生するデータベース レベルの監査アクションを収集します。 データベース監査の仕様には、監査アクション グループまたは監査イベントを追加できます。 Audit イベント は、SQL Server エンジンによって監査できるアトミック アクションです。 監査アクション グループ とは、アクションの定義済みのグループです。 どちらもSQL Serverデータベース スコープにあります。 これらのアクションは監査に送信されて、ターゲットに記録されます。 ユーザー データベース監査の仕様に、システム ビューなどのサーバースコープ オブジェクトは入れないでください。
データベース レベルの監査アクション グループと監査アクションについては、SQL Server監査アクション グループとアクションに関する記事で説明されています。
ターゲット
監査の結果は、ファイル、Windows セキュリティ イベント ログ、または Windows アプリケーション イベント ログなど、ターゲットに送信されます。 定期的にログをレビューおよびアーカイブして、ターゲットにレコードをさらに書き込むための十分なスペースを確保しておく必要があります。
重要
認証されたユーザーは、Windows アプリケーション イベント ログの読み取りと書き込みを行うことができます。 アプリケーション イベント ログは、Windows セキュリティ イベント ログよりも低いアクセス許可を必要とし、Windows セキュリティ イベント ログよりも安全性が低くなります。
Windows セキュリティ ログに書き込むには、SQL Server サービス アカウントを Generate セキュリティ監査 ポリシーに追加する必要があります。 既定では、ローカル システム、ローカル サービス、およびネットワーク サービスがこのポリシーに追加されています。 この設定は、セキュリティ ポリシー スナップイン (secpol.msc) を使用して構成できます。 さらに、 オブジェクト アクセスの監査 セキュリティ ポリシーを、 成功 と 失敗の両方について有効にする必要があります。 この設定は、セキュリティ ポリシー スナップイン (secpol.msc) を使用して構成できます。 Windows Vista または Windows Server 2008 以降では、監査ポリシー プログラム () を使用して、コマンド ラインから生成されるAuditPol.exe ポリシーをより細かく設定できます。 Windows セキュリティ ログへの書き込みを有効にする手順の詳細については、「SQL Server監査イベントをセキュリティ ログに書き込むを参照してください。 Auditpol.exe プログラムの詳細については、 グループ ポリシーを使用して詳細なセキュリティの監査を構成する方法に関するサポート技術情報の記事 921469 を参照してください。 Windows イベント ログは、Windows オペレーティング システムに対してグローバルです。 Windowsイベント ログの詳細については、「イベント ビューアー Overview」を参照してください。 監査でより厳密なアクセス許可が必要な場合は、バイナリ ファイル ターゲットを使用します。
改ざんの防止に役立てるために監査情報をファイルに保存している場合、次の方法でそのファイルの場所へのアクセスを制限できます。
SQL Server サービス アカウントには、読み取りと書き込みの両方のアクセス許可が必要です。
通常、監査管理者には、読み取り権限と書き込み権限が必要です。 これは、監査管理者が監査ファイルを別の共有にコピーしたり、バックアップしたりするなど、監査ファイルを管理するためのWindowsアカウントであることを前提としています。
監査ファイルの読み取りが許可されている監査リーダーには、読み取り権限が必要です。
データベース エンジンがファイルに書き込んでいる場合でも、他のWindowsユーザーはアクセス許可がある場合に監査ファイルを読み取ることができます。 データベース エンジンは、読み取り操作を妨げる排他ロックを取りません。
データベース エンジンはファイルにアクセスできるため、CONTROL SERVER アクセス許可を持つログインSQL Serverは、データベース エンジンを使用して監査ファイルにアクセスできます。 SQL Server 2022 (16.x) 以降のバージョンでは、VIEW SERVER SECURITY AUDIT アクセス許可は、fn_get_audit_file を使用して監査ファイルを読み取るために十分です。 監査ファイルの読み取りを行っているユーザーを記録するには、master.sys.fn_get_audit_file で監査を定義します。 これにより、SQL Serverを介して監査ファイルにアクセスした CONTROL SERVER アクセス許可を持つログインが記録されます。
fn_get_audit_fileアクセス許可の詳細については、「sys.fn_get_audit_file」を参照してください。
監査管理者が別の場所に監査ファイルをコピーする場合 (アーカイブ用など)、新しい場所に対するアクセス制御リスト (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の Log File Viewer または fn_get_audit_file 関数を使用してターゲット ファイルを読み取ることができます。
監査の作成および使用の一般的な手順は次のとおりです。
- 監査を作成し、ターゲットを定義します。
- 監査にマップするサーバー監査の仕様またはデータベース監査の仕様を作成します。 監査仕様を有効にします。
- 監査を有効にします。
- Windows イベント ビューアー、Log ファイル ビューアー、または
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 メッセージがエラー ログに書き込まれます。
サービスのスタートアップ オプションの詳細については、「データベース エンジン サービスのスタートアップ オプション」を参照してください。
Azure SQL Managed Instanceでの内部操作
- Azure SQL DatabaseおよびAzure SQL Managed Instanceでは、
SQLDBControlPlaneFirstPartyAppによって開始されるイベントは、Azure SQL Database コントロール プレーンの内部Azure関数です。SQLDBControlPlaneFirstPartyAppによって開始されるイベントは、SQL エンジンとAzure Resource Manager間の内部同期操作の一部です。 これらのイベントは、リソース管理の通常の部分であり、Azureでの適切なリソース表現と操作に必要です。
監査が定義されたデータベースをアタッチする
監査仕様を持ち、サーバー上に存在しない GUID を指定するデータベースをアタッチすると、 孤立した 監査仕様が発生します。 この場合は、一致する GUID を持つ監査がサーバー インスタンスに存在しないため、監査イベントは記録されません。 この状況を修正するには、 ALTER DATABASE AUDIT SPECIFICATION コマンドを使用して、孤立した監査仕様を既存のサーバー監査に接続します。 または、 CREATE SERVER AUDIT コマンドを使用して、指定した GUID で新しいサーバー監査を作成します。
監査仕様が定義されているデータベースを、SQL Server監査をサポートしていない別のエディションのSQL Server (SQL Server Express など) にアタッチできますが、監査イベントは記録されません。
データベース ミラーリングとSQL Server監査
データベース監査仕様が定義されていて、データベース ミラーリングを使用するデータベースには、データベース監査仕様が含まれます。 ミラー化された SQL インスタンスでも正しく機能するようにするには、以下の項目を構成する必要があります。
データベース監査の仕様が監査レコードを書き込めるようにするには、同じ GUID を持つ監査をミラー サーバーに作成する必要があります。 これは、コマンド
CREATE AUDIT WITH GUID = <guid-from-source-server-audit>を使用して構成できます。バイナリ ファイル ターゲットの場合は、監査記録が書き込まれる場所に対する適切なアクセス許可がミラー サーバーのサービス アカウントに必要です。
Windowsイベント ログ ターゲットの場合、ミラー サーバーが配置されているコンピューターのセキュリティ ポリシーで、セキュリティまたはアプリケーション イベント ログへのサービス アカウント アクセスが許可されている必要があります。
管理者アクティビティの監査
sysadmin 固定サーバー ロールのメンバーは、各データベースで dbo ユーザーとして認識されます。 管理者のアクションを監査するには、 dbo ユーザーのアクションを監査します。
アクセス許可
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 のアクセス許可がある場合でも、カタログ ビューを表示する機能がオーバーライドされます。
fn_get_audit_file を使用して監査データを読み取る場合、SQL Server 2019 (15.x) 以前のバージョンではサーバーに対する CONTROL SERVER アクセス許可が必要ですが、SQL Server 2022 (16.x) 以降のバージョンには VIEW SERVER SECURITY AUDIT アクセス許可が必要です。 詳細については、「sys.fn_get_audit_file」 を参照してください。
権限とアクセス許可を付与する方法の詳細については、「 GRANT」を参照してください。
注意事項
sysadmin ロールのプリンシパルは監査コンポーネントを改ざんする可能性があり、db_owner ロールのプリンシパルはデータベースの監査仕様を改ざんする可能性があります。 SQL Server監査は、監査仕様を作成または変更するログオンに、少なくとも ALTER ANY DATABASE AUDIT アクセス許可があることを検証します。 ただし、データベースにアタッチするときには検証は行われません。 すべてのデータベース監査仕様は、 sysadmin ロールまたは db_owner ロールのプリンシパルと同じくらい信頼できると想定する必要があります。
Transact-SQLを使用して監査を作成および管理する
DDL ステートメント、動的管理ビューと関数、カタログ ビューを使用して、SQL Server Audit のすべての側面を実装できます。
データ定義言語ステートメント
以下の DDL ステートメントを使用して、監査の仕様を作成、変更、および削除することができます。
| DDL ステートメント | 説明 |
|---|---|
| 権限の変更 | セキュリティ可能なオブジェクトの所有権を変更します。 |
| ALTER DATABASE AUDIT SPECIFICATION | SQL Server監査機能を使用して、データベース監査仕様オブジェクトを変更します。 |
| ALTERサーバー監査 | SQL Server監査機能を使用して、サーバー監査オブジェクトを変更します。 |
| サーバー監査仕様の変更 | SQL Server監査機能を使用して、サーバー監査仕様オブジェクトを変更します。 |
| データベース監査仕様を作成 | SQL Server監査機能を使用して、データベース監査仕様オブジェクトを作成します。 |
| サーバー監査を作成 | SQL Server Audit を使用してサーバー監査オブジェクトを作成します。 |
| サーバー監査仕様の作成 | SQL Server監査機能を使用して、サーバー監査仕様オブジェクトを作成します。 |
| データベース監査仕様を削除 | SQL Server監査機能を使用して、データベース監査仕様オブジェクトを削除します。 |
| DROP SERVER AUDIT サーバー監査を削除する | SQL Server監査機能を使用して、サーバー監査オブジェクトを削除します。 |
| サーバー監査仕様の削除 | SQL Server監査機能を使用して、サーバー監査仕様オブジェクトを削除します。 |
動的ビューと関数
次の表に、SQL Server監査に使用できる動的ビューと関数を示します。
| 動的ビューと関数 | 説明 |
|---|---|
| sys.dm_audit_actions | 監査ログに報告できるすべての監査アクションと、SQL Server 監査の一部として構成できるすべての監査アクション グループの行を返します。 |
| 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監査におけるサーバー監査仕様の詳細 (アクション) に関する情報が含まれています。 |
| サーバーファイル監査 | ファイル監査タイプに関する拡張情報をサーバーインスタンス上のSQL Server監査内に含んでいます。 |