CREATE SERVER AUDIT (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
SQL Server Audit を使用して、サーバー監査オブジェクトを作成します。 詳細については、「SQL Server Audit (データベース エンジン)」を参照してください。
構文
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 } ]
}
<predicate_expression> ::=
{
[ NOT ] <predicate_factor>
[ { AND | OR } [ NOT ] { <predicate_factor> } ]
[ , ...n ]
}
<predicate_factor>::=
event_field_name { = | < > | != | > | >= | < | <= | LIKE } { number | ' string ' }
引数
TO { FILE | APPLICATION_LOG | SECURITY_LOG | URL | EXTERNAL_MONITOR }
監査ターゲットの場所を指定します。 オプションは、バイナリ ファイル、Windows アプリケーション ログ、または Windows セキュリティ ログです。 SQL Server は、Windows で追加の設定を行わないと Windows セキュリティ ログに書き込むことができません。 詳細については、「セキュリティ ログへの SQL Server 監査イベントの書き込み」を参照してください。
URL
ターゲットは SQL Server ではサポートされていません。
重要
Azure SQL Managed Instance では、SQL 監査はサーバー レベルで動作します。 場所は URL
または EXTERNAL_MONITOR
にのみすることができます。
FILEPATH = '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
を指定した場合、ファイルはディスクがいっぱいになるまで拡張されます。 (0
も UNLIMITED
を示します。) 2 MB 未満の値を指定すると、エラー MSG_MAXSIZE_TOO_SMALL
が発生します。 既定値は UNLIMITED
です。
MAXSIZE
ターゲットは、Azure SQL Managed Instance ではサポートされていません。
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 です。
Azure SQL Managed Instance では MAX_ROLLOVER_FILES
をサポートしていません。
MAX_FILES = integer
適用対象: SQL Server 2012 (11.x) 以降。
作成できる監査ファイルの最大数を指定します。 制限に達しても、最初のファイルへのロールオーバーは行われません。 MAX_FILES
の制限に達すると、追加の監査イベントを生成させるアクションは失敗し、エラーが発生します。
RESERVE_DISK_SPACE = { ON | OFF }
このオプションは、ディスク上のファイルを MAXSIZE
値に事前に割り当てます。 MAXSIZE
が UNLIMITED
と等しくない場合にのみ適用されます。 既定値は OFF
です。
RESERVE_DISK_SPACE
ターゲットは、Azure SQL Managed Instance ではサポートされていません。
QUEUE_DELAY = integer
監査アクションの処理が強制されるまでの経過時間 (ミリ秒) を指定します。 値 0 は同期配信を表します。 クエリ遅延に設定可能な最小値は 1000
(1 秒) で、これが既定値です。 最大値は 2147483647
(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
SQL Server がなんらかの理由で監査ターゲットへのデータの書き込みに失敗した場合は、SQL Server のインスタンスを強制的にシャットダウンします。 CREATE SERVER AUDIT
ステートメントを実行しているログインには、SQL Server 内での SHUTDOWN
権限が必要です。 実行中のログインから SHUTDOWN
権限が後で取り消された場合でも、シャットダウンの動作は継続します。 ユーザーがこのアクセス許可を持っていない場合は、ステートメントが失敗し、監査は作成されません。 監査エラーによってシステムのセキュリティまたは整合性が阻害される可能性がある場合に、このオプションを使用します。 詳細については、「SHUTDOWN」を参照してください。
FAIL_OPERATION
適用対象: SQL Server 2012 (11.x) 以降。
監査イベントを発生させるデータベース アクションを失敗させます。 監査イベントを発生させないアクションは続行できますが、監査イベントを発生させることはできません。 監査はイベントのログ記録を試行し続け、エラー状態が解決されると、記録を再開します。 データベース エンジンへのフル アクセスより、完全な監査の維持の方が重要である場合に、このオプションを使用します。
AUDIT_GUID = uniqueidentifier
監査には、データベース ミラーリングなどのシナリオをサポートするために、ミラーリングされたデータベースで見つかった GUID と照合する特定の GUID が必要です。 この GUID は、監査が作成されると変更できなくなります。
OPERATOR_AUDIT
適用対象: Azure SQL Managed Instance のみ。
サポート リクエストの間に Microsoft サポート エンジニアがお客様のサーバーにアクセスする必要がある場合に、監査によってその操作がキャプチャされるかどうかを示します。
predicate_expression
適用対象: SQL Server 2012 (11.x) 以降のバージョン。
イベントを処理する必要があるかどうかを判定するために使用する述語式を指定します。 述語式は 3,000 文字に制限され、これにより文字列引数が制限されます。
event_field_name
適用対象: SQL Server 2012 (11.x) 以降のバージョン。
述語ソースを識別するイベント フィールドの名前です。 監査フィールドについては、「sys.fn_get_audit_file (Transact-SQL)」で説明されています。 file_name
、audit_file_offset
、event_time
以外のすべてのフィールドは監査できます。
Note
action_id
および class_type
フィールドは、型が sys.fn_get_audit_file
に示されている varchar で、フィルター対象の述語ソースである場合にのみ、数値と共に使用できます。 class_type
で使用する値のリストを取得するには、次のクエリを実行します。
SELECT spt.[name], spt.[number] FROM [master].[dbo].[spt_values] spt WHERE spt.[type] = N'EOD' ORDER BY spt.[name];
数値
適用対象: SQL Server 2012 (11.x) 以降のバージョン。
decimal を含む任意の数値型です。 制限として、使用可能な物理メモリの不足、または 64 ビット整数として表すのに大きすぎる数字が挙げられます。
'文字列'
適用対象: SQL Server 2012 (11.x) 以降のバージョン。
述語の比較に必要な ANSI 文字列または Unicode 文字列です。 述語比較関数に対しては、暗黙の文字列型変換は行われません。 無効な型を渡すとエラーになります。
解説
作成されたサーバー監査は無効な状態です。
CREATE SERVER AUDIT
ステートメントはトランザクションのスコープ内にあります。 トランザクションがロールバックされると、ステートメントもロールバックされます。
アクセス許可
サーバー監査を作成、変更、または削除する場合、プリンシパルには、ALTER ANY SERVER AUDIT
または CONTROL SERVER
の権限が必要です。
改ざんを防止するために監査情報をファイルに保存する場合は、そのファイルの場所へのアクセスを制限します。
例
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
-- 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)
- サーバー監査およびサーバー監査の仕様を作成する