CREATE SERVER AUDIT (Transact-SQL)

適用対象:SQL ServerAzure SQL Managed Instance

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

Transact-SQL 構文表記規則

Syntax

CREATE SERVER AUDIT audit_name
{
    TO {
        [ FILE ( <file_options> [ ,... n ] ) ]
        | APPLICATION_LOG
        | SECURITY_LOG
        | URL
        | EXTERNAL_MONITOR
    }
    [ 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 ]
    [ , OPERATOR_AUDIT = { ON | OFF } ]
    [ , RETENTION_DAYS = integer ]
}

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

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

Arguments

audit_name

監査の名前。 SQL Server 2019 (15.x) 以前のバージョンでは、監査名にスペースを含めることはできません。

宛先 { ファイル |APPLICATION_LOG |SECURITY_LOG |関連URL |EXTERNAL_MONITOR }

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

URL ターゲットは SQL Server ではサポートされていません。

Important

Azure SQL Managed Instance では、SQL 監査はサーバー レベルで動作します。 場所は URL または EXTERNAL_MONITOR にのみすることができます。

ファイルパス = 'os_file_path'

監査ログのパス。 ファイル名は、監査名と監査 GUID に基づいて生成されます。 このパスが無効な場合、監査は作成されません。

FILEPATH ターゲットは、Azure SQL Managed Instance ではサポートされていません。 代わりに PATH を使用する必要があります。

MAXSIZE = max_size

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

MAXSIZE ターゲットは、Azure SQL Managed Instance ではサポートされていません。

MAX_ROLLOVER_FILES = { 整数 |無制限 }

現在のファイルに加えてファイル システム内に保持するファイルの最大数を指定します。 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 です。

Azure SQL Managed Instance では MAX_ROLLOVER_FILES をサポートしていません。

MAX_FILES = 整数

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

RESERVE_DISK_SPACE = { オン |オフ }

このオプションは、ディスク上のファイルを MAXSIZE 値に事前に割り当てます。 MAXSIZEUNLIMITED と等しくない場合にのみ適用されます。 既定値は OFF です。

RESERVE_DISK_SPACE ターゲットは、Azure SQL Managed Instance ではサポートされていません。

QUEUE_DELAY = 整数

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

ON_FAILURE = { 続き |シャットダウン |FAIL_OPERATION }

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

CONTINUE

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

SHUTDOWN

SQL Server がなんらかの理由で監査ターゲットへのデータの書き込みに失敗した場合は、SQL Server のインスタンスを強制的にシャットダウンします。 CREATE SERVER AUDIT ステートメントを実行しているログインには、SQL Server 内での SHUTDOWN 権限が必要です。 実行中のログインから SHUTDOWN 権限が後で取り消された場合でも、シャットダウンの動作は継続します。 ユーザーがこのアクセス許可を持っていない場合、ステートメントは失敗し、監査は作成されません。 監査エラーによってシステムのセキュリティまたは整合性が阻害される可能性がある場合に、このオプションを使用します。 詳細については、「SHUTDOWN」を参照してください。

FAIL_OPERATION

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

AUDIT_GUID = uniqueidentifier

データベース ミラーリングや Always On 可用性グループに参加しているデータベースなどのシナリオをサポートするには、監査にはミラー化されたデータベースで見つかった GUID と一致する特定の GUID が必要です。 監査の作成後に GUID を変更することはできません。

OPERATOR_AUDIT

適用対象: Azure SQL Managed Instance のみ。

サポート リクエストの間に Microsoft サポート エンジニアがお客様のサーバーにアクセスする必要がある場合に、監査によってその操作がキャプチャされるかどうかを示します。

RETENTION_DAYS = 整数

適用対象: Azure SQL Managed Instance と Azure SQL Database のみ。

監査ログ ファイルを格納する日数を示します。

predicate_expression

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

event_field_name

述語ソースを識別するイベント フィールドの名前です。 監査フィールドについては、 sys.fn_get_audit_fileで説明します。 file_nameaudit_file_offsetevent_timeを除くすべてのフィールドをフィルター処理できます。

action_idフィールドとclass_type フィールドはsys.fn_get_audit_filevarchar 型ですが、フィルター処理の述語ソースである場合にのみ、数値と共に使用できます。 class_typeで使用する値の一覧を取得するには、次のクエリを実行します。

SELECT spt.[name], spt.[number]
FROM [master].[dbo].[spt_values] spt
WHERE spt.[type] = N'EOD'
ORDER BY spt.[name];

番号

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

'string'

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

Remarks

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

CREATE SERVER AUDIT ステートメントはトランザクションの一部です。 トランザクションをロールバックすると、ステートメントもロールバックされます。

Permissions

サーバー監査を作成、変更、または削除するには、プリンシパルに ALTER ANY SERVER AUDIT または CONTROL SERVER アクセス許可が必要です。

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

Examples

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

次の例では、 HIPAA_Audit という名前のサーバー監査を作成し、ターゲットとしてバイナリ ファイルを指定し、オプションを指定しません。

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

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

次の例では、Windows アプリケーション ログのターゲット セットを使用して、 HIPAA_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

master データベースにサーバー監査を作成します。

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

TestDB データベースにデータベース監査仕様を作成します。

USE TestDB;
GO

CREATE DATABASE AUDIT SPECIFICATION [FilterForSensitiveData]
    FOR SERVER AUDIT [AuditDataAccess]
    ADD (SELECT ON SCHEMA::[DataSchema] BY [public])
    WITH(STATE = ON);
GO

テーブルから選択して監査イベントをトリガーします。

SELECT ID,
       DataField
FROM DataSchema.GeneralData;

SELECT ID,
       DataField
FROM DataSchema.SensitiveData;
GO

フィルター処理されたコンテンツの監査を確認します。

SELECT *
FROM fn_get_audit_file('C:\SQLAudit\AuditDataAccess_*.sqlaudit', DEFAULT, DEFAULT);
GO

Transact-SQL 参考文献