CREATE SERVER AUDIT (Transact-SQL)

SQL Server Audit を使用してサーバーの監査オブジェクトを作成します。 詳細については、「SQL Server Audit (データベース エンジン)」を参照してください。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

CREATE SERVER AUDIT audit_name
{
    TO { [ FILE (<file_options> [ , ...n ] ) ] | APPLICATION_LOG | SECURITY_LOG }
    [ WITH ( <audit_options> [ , ...n ] ) ] 
    [ WHERE <predicate_expression> ]
}
[ ; ]

<file_options>::=
{
        FILEPATH = 'os_file_path'
    [ , MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
    [ , { MAX_ROLLOVER_FILES = { integer | UNLIMITED } } | { MAX_FILES = integer } ]
    [ , RESERVE_DISK_SPACE = { ON | OFF } ] 
}

<audit_options>::=
{
    [   QUEUE_DELAY = integer ]
    [ , ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION } ]
    [ , AUDIT_GUID = uniqueidentifier ]
}

<predicate_expression>::=
{
    [NOT ] <predicate_factor> 
    [ { AND | OR } [NOT ] { <predicate_factor> } ] 
    [,...n ]
}

<predicate_factor>::= 
    event_field_name { = | < > | ! = | > | > = | < | < = } { number | ' string ' }

引数

  • TO { FILE | APPLICATION_LOG | SECURITY_LOG }
    監査ターゲットの場所を指定します。 バイナリ ファイル、Windows アプリケーション ログ、または Windows セキュリティ ログを指定できます。 SQL Server は、Windows で追加の設定を行わないと Windows セキュリティ ログに書き込むことができません。 詳細については、「セキュリティ ログへの SQL サーバー監査イベントの書き込み」を参照してください。

  • FILEPATH ='os_file_path'
    監査ログのパス。 ファイル名は、監査名と監査 GUID に基づいて生成されます。

  • MAXSIZE = { max_size }
    監査ファイルのサイズの上限を指定します。 max_size の値は、整数の後に MB、GB、TB を付けて指定するか、または UNLIMITED を指定します。 max_size に指定できる最小サイズは 2 MB、最大サイズは 2,147,483,647 TB です。 UNLIMITED を指定した場合、ファイルはディスクがいっぱいになるまで拡張されます。 0 も UNLIMITED を示します。2 MB 未満の値を指定すると、MSG_MAXSIZE_TOO_SMALL エラーが発生します。 既定値は UNLIMITED です。

  • MAX_ROLLOVER_FILES ={ integer | UNLIMITED }
    現在のファイルに加えてファイル システム内に保持するファイルの最大数を指定します。 MAX_ROLLOVER_FILES 値には整数値または UNLIMITED を指定してください。 既定値は UNLIMITED です。 監査が再開されるたび (データベース エンジン インスタンスの再起動時や、監査をオフにして再度オンにしたとき)、または MAXSIZE に達して新しいファイルが必要になった場合に、このパラメーターが評価されます。 MAX_ROLLOVER_FILES の評価時にファイル数が MAX_ROLLOVER_FILES の設定を超えている場合、最も古いファイルが削除されます。 そのため、MAX_ROLLOVER_FILES を 0 に設定した場合、MAX_ROLLOVER_FILES 設定が評価されるたびに新しいファイルが作成されます。 MAX_ROLLOVER_FILES 設定の評価時に自動的に削除されるファイルは 1 つだけです。したがって、MAX_ROLLOVER_FILES 値を下げても、古いファイルを手動で削除しない限り、ファイル数は少なくなりません。 指定できるファイルの最大数は 2,147,483,647 です。

  • MAX_FILES =integer
    作成できる監査ファイルの最大数を指定します。 制限に達しても、最初のファイルへのロールオーバーは行われません。 MAX_FILES の制限に達すると、追加の監査イベントを生成させるアクションは失敗し、エラーが発生します。

  • RESERVE_DISK_SPACE = { ON | OFF }
    このオプションは、ディスク上のファイルを MAXSIZE 値に事前に割り当てます。 MAXSIZE が UNLIMITED でない場合にのみ適用されます。 既定値は OFF です。

  • QUEUE_DELAY =integer
    監査アクションの処理が強制されるまでの経過時間 (ミリ秒) を指定します。 値 0 は同期配信を表します。 クエリ遅延に設定可能な最小値は 1000 (1 秒) で、これが既定値です。 最大値は 2,147,483,647 (2,147,483.647 秒、つまり 24 日、20 時間、31 分、23.647 秒) です。 無効な数値を指定すると、MSG_INVALID_QUEUE_DELAY エラーが発生します。

  • ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION }
    ターゲットで監査ログへの書き込みができない場合に、ターゲットへのインスタンスの書き込みをエラーにするか、続行するか、SQL Server を停止するかを示します。 既定値は CONTINUE です。

    • CONTINUE
      SQL Server の操作を続行します。 監査レコードは保持されません。 監査はイベントのログ記録を試行し続け、エラー状態が解決されると、記録を再開します。 続行のオプションを選択すると、セキュリティ ポリシーに違反する可能性のある、監査されない活動も許可される場合があります。 完全な監査を維持することより、データベース エンジンの操作を続行することの方が重要である場合に、このオプションを使用します。

    • SHUTDOWN
      監査対象に書き込みを行うサーバー インスタンスが監査対象にデータを書き込むことができない場合に、サーバーを強制的にシャットダウンします。 これを発行するログインには、SHUTDOWN 権限が必要です。 ログオンにこの権限がない場合、この機能は失敗し、エラー メッセージが表示されます。 監査イベントは発生しません。 監査エラーによってシステムのセキュリティまたは整合性が阻害される可能性がある場合に、このオプションを使用します。

    • FAIL_OPERATION
      監査イベントを発生させるデータベース アクションを失敗させます。 監査イベントを発生させないアクションは続行できますが、監査イベントを発生させることはできません。 監査はイベントのログ記録を試行し続け、エラー状態が解決されると、記録を再開します。 データベース エンジンへのフル アクセスより、完全な監査の維持の方が重要である場合に、このオプションを使用します。

  • AUDIT_GUID =uniqueidentifier
    監査には、データベース ミラーリングなどのシナリオをサポートするために、ミラーリングされたデータベースで見つかった GUID と照合する特定の GUID が必要です。 この GUID は、監査が作成されると変更できなくなります。

  • predicate_expression
    イベントを処理する必要があるかどうかを判定するために使用する述語式を指定します。 述語式は 3,000 文字に制限され、これにより文字列引数が制限されます。

  • event_field_name
    述語ソースを識別するイベント フィールドの名前を指定します。 監査フィールドについては、「sys.fn_get_audit_file (Transact-SQL)」で説明されています。 file_name と audit_file_offset 以外のすべてのフィールドは、監査できます。

  • number
    decimal を含む任意の数値型を指定します。 制限として、使用可能な物理メモリの不足、または 64 ビット整数として表すのに大きすぎる数字が挙げられます。

  • ' string '
    述語の比較に必要な ANSI 文字列または Unicode 文字列です。 述語比較関数に対しては、暗黙の文字列型変換は行われません。 無効な型を渡すとエラーになります。

説明

作成されたサーバー監査は無効な状態です。

CREATE SERVER AUDIT ステートメントはトランザクションのスコープ内にあります。 トランザクションがロールバックされると、ステートメントもロールバックされます。

権限

サーバー監査を作成、変更、または削除する場合、プリンシパルには、ALTER ANY SERVER AUDIT または CONTROL SERVER の権限が必要です。

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

使用例

A. ファイル ターゲットを使用するサーバー監査を作成する

次の例では、バイナリ ファイルをターゲットとする HIPPA_Audit というサーバー監査を、オプションなしで作成します。

CREATE SERVER AUDIT HIPAA_Audit
    TO FILE ( FILEPATH ='\\SQLPROD_1\Audit\' );

B. Windows アプリケーション ログ ターゲットを使用するサーバー監査をオプション付きで作成する

次の例では、Windows アプリケーション ログをターゲット セットとする HIPPA_Audit というサーバー監査を作成します。 キューには 1 秒ごとに書き込みが行われ、失敗時はキューによって SQL Server エンジンがシャットダウンされます。

CREATE SERVER AUDIT HIPAA_Audit
    TO APPLICATION_LOG
    WITH ( QUEUE_DELAY = 1000,  ON_FAILURE = SHUTDOWN);

C. WHERE 句を含むサーバー監査を作成する

次の例では、データベース、スキーマ、およびサンプルの 2 つのテーブルを作成します。 DataSchema.SensitiveData という名前のテーブルには機密データが含まれ、このテーブルへのアクセスは監査に記録する必要があります。 DataSchema.GeneralData という名前のテーブルには、機密データは含まれません。 データベース監査の仕様によって、DataSchema スキーマのすべてのオブジェクトへのアクセスが監査されます。 サーバー監査の対象を SensitiveData テーブルのみに制限する WHERE 句付きで、サーバー監査が作成されます。 サーバー監査は、監査フォルダーが C:\SQLAudit にあることを前提としています。

CREATE DATABASE TestDB;
GO
USE TestDB;
GO
CREATE SCHEMA DataSchema;
GO
CREATE TABLE DataSchema.GeneralData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
CREATE TABLE DataSchema.SensitiveData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
-- Create the server audit in the master database
USE master;
GO
CREATE SERVER AUDIT AuditDataAccess
    TO FILE ( FILEPATH ='C:\SQLAudit\' )
    WHERE object_name = 'SensitiveData' ;
GO
ALTER SERVER AUDIT AuditDataAccess WITH (STATE = ON);
GO
-- Create the database audit specification in the TestDB database
USE TestDB;
GO
CREATE DATABASE AUDIT SPECIFICATION [FilterForSensitiveData]
FOR SERVER AUDIT [AuditDataAccess] 
ADD (SELECT ON SCHEMA::[DataSchema] BY [public])
WITH (STATE = ON);
GO
-- Trigger the audit event by selecting from tables
SELECT ID, DataField FROM DataSchema.GeneralData;
SELECT ID, DataField FROM DataSchema.SensitiveData;
GO
-- Check the audit for the filtered content
SELECT * FROM fn_get_audit_file('C:\SQLAudit\AuditDataAccess_*.sqlaudit',default,default);
GO

関連項目

参照

ALTER SERVER AUDIT (Transact-SQL)

DROP SERVER AUDIT (Transact-SQL)

CREATE SERVER AUDIT SPECIFICATION (Transact-SQL)

ALTER SERVER AUDIT SPECIFICATION (Transact-SQL)

DROP SERVER AUDIT SPECIFICATION (Transact-SQL)

CREATE DATABASE AUDIT SPECIFICATION (Transact-SQL)

ALTER DATABASE AUDIT SPECIFICATION (Transact-SQL)

DROP DATABASE AUDIT SPECIFICATION (Transact-SQL)

ALTER AUTHORIZATION (Transact-SQL)

sys.fn_get_audit_file (Transact-SQL)

sys.server_audits (Transact-SQL)

sys.server_file_audits (Transact-SQL)

sys.server_audit_specifications (Transact-SQL)

sys.server_audit_specification_details (Transact-SQL)

sys.database_audit_specifications (Transact-SQL)

sys.database_audit_specification_details (Transact-SQL)

sys.dm_server_audit_status (Transact-SQL)

sys.dm_audit_actions (Transact-SQL)

sys.dm_audit_class_type_map (Transact-SQL)

概念

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