sys.fn_get_audit_file_v2 (Transact-SQL)
適用対象: Azure SQL Database
Azure SQL Database の sys.fn_get_audit_file_v2
システム関数は、前身の sys.fn_get_audit_file
と比較して効率が向上した監査ログ データを取得するように設計されています。 この関数では、ファイル レベルとレコード レベルの両方で時間ベースのフィルター処理が導入され、特に特定の時間範囲を対象とするクエリのパフォーマンスが大幅に向上します。
重要
sys.fn_get_audit_file_v2
は現在、Azure SQL Database でのみサポートされています。
Azure SQL Database のサーバー監査によって作成された監査ファイルから情報を返します。 詳細については、「SQL Server Audit (データベース エンジン)」を参照してください。
構文
fn_get_audit_file_v2 ( file_pattern
, { default | initial_file_name | NULL }
, { default | audit_record_offset | NULL }
, { default | start time | NULL }
, { default | end time | NULL } )
引数
file_pattern
読み取り対象に設定する監査ファイルのディレクトリまたはパスとファイル名を指定します。 file_pattern は nvarchar(260)です。
ファイル名パターンなしでパスを渡すと、エラーが発生します。
この引数は、BLOB URL (ストレージ エンドポイントとコンテナーを含む) を指定するために使用されます。 アスタリスク ワイルドカードはサポートされていませんが、部分ファイル (BLOB) 名プレフィックス (完全な BLOB 名ではなく) を使用して、このプレフィックスで始まる複数のファイル (BLOB) を収集できます。 次に例を示します。
<Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/
- 特定のデータベースのすべての監査ファイル (BLOB) を収集します。<Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/<AuditName>/<CreationDate>/<FileName>.xel
- 特定の監査ファイル (BLOB) を収集します。
initial_file_name
監査レコードの読み取りを開始する監査ファイル セット内の特定のファイルのパスと名前を指定します。 initial_file_name は nvarchar(260)です。
initial_file_name引数には、有効なエントリが含まれているか、default
またはNULL
値を含む必要があります。
audit_record_offset
initial_file_nameに指定されたファイルの既知の場所を指定します。 この引数を使用すると、関数は、指定されたオフセットの直後にあるバッファーの最初のレコードで読み取りを開始します。
audit_record_offset引数には、有効なエントリが含まれているか、default
またはNULL
値を含む必要があります。 audit_record_offset は bigint です。
start_time
ログをフィルター処理するための開始時刻。 この時刻より前のレコードは除外されます。
end_time
ログをフィルター処理するための終了時刻。 この時刻より後のレコードは除外されます。
返されるテーブル
次の表では、この関数によって返される監査ファイルの内容について説明します。
列名 | 種類 | 説明 |
---|---|---|
event_time |
datetime2 | 監査可能なアクションが発生した日時。 NULL 値は許可されません。 |
sequence_number |
int | 大きすぎて監査の書き込みバッファーに収まらなかった 1 つの監査レコード内のレコードの順序を追跡します。 NULL 値は許可されません。 |
action_id |
varchar (4) | アクションの ID。 NULL 値は許可されません。 |
succeeded |
bit | イベントをトリガーしたアクションが成功したかどうかを示します。 NULL 値は許可されません。 ログイン イベント以外のすべてのイベントで、操作ではなく、権限チェックが成功したか失敗したかのみを報告します。1 = 成功0 = fail |
permission_bitmask |
varbinary(16) | 一部のアクションでは、このビットマスクは許可、拒否、または取り消されたアクセス許可です。 |
is_column_permission |
bit | 列レベルのアクセス許可であるかどうかを示すフラグ。 NULL 値は許可されません。 permission_bitmask = 0 時の0 を返します。1 = true0 = false |
session_id |
smallint | イベントが発生したセッションの ID。 NULL 値は許可されません。 |
server_principal_id |
int | アクションが実行されるログイン コンテキストの ID。 NULL 値は許可されません。 |
database_principal_id |
int | アクションが実行されるデータベース ユーザー コンテキストの ID。 NULL 値は許可されません。 これが適用されない場合は、 0 を返します。 たとえば、サーバー操作などの場合です。 |
target_server_principal_id |
int | GRANT /DENY /REVOKE 操作が実行されるサーバー プリンシパル。 NULL 値は許可されません。 該当しない場合は 0 を返します。 |
target_database_principal_id |
int | GRANT /DENY /REVOKE 操作が実行されるデータベース プリンシパル。 NULL 値は許可されません。 該当しない場合は 0 を返します。 |
object_id |
int | 監査が発生したエンティティの ID。これには、次のオブジェクトが含まれます。 - サーバー オブジェクト -データベース - データベース オブジェクト - スキーマ オブジェクト NULL 値は許可されません。 エンティティがサーバー自体の場合、または監査がオブジェクト レベルで実行されていない場合は、 0 を返します。 たとえば、認証などの場合です。 |
class_type |
varchar(2) | 監査が発生する監査可能なエンティティの種類。 NULL 値は許可されません。 |
session_server_principal_name |
sysname | セッションのサーバー プリンシパル。 Null 許容。 明示的または暗黙的なコンテキスト 切り替えがあった場合に、データベース エンジンのインスタンスに接続された元のログインの ID を返します。 |
server_principal_name |
sysname | 現在のログイン。 Null 許容。 |
server_principal_sid |
varbinary | 現在のログイン SID。 Null 許容。 |
database_principal_name |
sysname | 現在のユーザー。 Null 許容。 使用できない場合は NULL を返します。 |
target_server_principal_name |
sysname | アクションの対象ログイン。 Null 許容。 該当しない場合は NULL を返します。 |
target_server_principal_sid |
varbinary | 対象ログインのセキュリティ ID。 Null 許容。 該当しない場合は NULL を返します。 |
target_database_principal_name |
sysname | アクションの対象ユーザー。 Null 許容。 該当しない場合は NULL を返します。 |
server_instance_name |
sysname | 監査が発生したサーバー インスタンスの名前。 標準の server\instance 形式が使用されます。 |
database_name |
sysname | アクションが発生したデータベース コンテキスト。 Null 許容。 サーバー レベルで発生する監査の NULL を返します。 |
schema_name |
sysname | アクションが発生したスキーマ コンテキスト。 Null 許容。 スキーマの外部で発生した監査の NULL を返します。 |
object_name |
sysname | 監査が発生したエンティティの名前。これには、次のオブジェクトが含まれます。 - サーバー オブジェクト -データベース - データベース オブジェクト - スキーマ オブジェクト Null 許容。 エンティティがサーバー自体の場合、または監査がオブジェクト レベルで実行されていない場合は、 NULL を返します。 たとえば、認証などの場合です。 |
statement |
nvarchar (4000) | Transact-SQL ステートメントが存在する場合。 Null 許容。 該当しない場合は NULL を返します。 |
additional_information |
nvarchar (4000) | 単一のイベントに対してだけ適用される固有の情報が XML として返されます。 いくつかの監査可能なアクションには、この種の情報が含まれています。 T-SQL スタックが関連付けられているアクションについては、1 レベルの T-SQL スタックが XML 形式で表示されます。 XML 形式は次のとおりです。 <tsql_stack><frame nest_level = '%u' database_name = '%.*s' schema_name = '%.*s' object_name = '%.*s' /></tsql_stack> frame nest_level は、フレームの現在の入れ子レベルを示します。 モジュール名は、3 つの部分形式 (database_name 、 schema_name 、および object_name ) で表されます。 モジュール名は、 < 、 > 、 / 、 _x などの無効な XML 文字をエスケープするために解析されます。 これらは _xHHHH_ としてエスケープされます。 HHHH は、文字の 4 桁の 16 進数 UCS-2 コードを表します。 Null 許容。 イベントによって報告された追加情報がない場合に NULL を返します。 |
file_name |
varchar(260) | レコードの取得元の監査ログ ファイルのパスと名前。 NULL 値は許可されません。 |
audit_file_offset |
bigint | 監査レコードを含むファイル内のバッファー オフセット。 NULL 値は許可されません。 適用対象: SQL Server のみ |
user_defined_event_id |
smallint | sp_audit_write の引数として渡されるユーザー定義のイベント ID。 NULL システム イベント (既定) の場合は 0 以外、ユーザー定義イベントの場合は 0 以外。 詳細については、「 sp_audit_write (Transact-SQL)」を参照してください。適用対象: SQL Server 2012 (11.x) 以降、Azure SQL Database、SQL Managed Instance |
user_defined_information |
nvarchar (4000) | sp_audit_write ストアド プロシージャを使用して、ユーザーが監査ログに記録する追加情報を記録するために使用します。適用対象: SQL Server 2012 (11.x) 以降のバージョン、Azure SQL Database、および SQL Managed Instance |
audit_schema_version |
int | 常に 1 です。 |
sequence_group_id |
varbinary | 一意な 識別子。 適用対象: SQL Server 2016 (13.x) 以降のバージョン |
transaction_id |
bigint | 1 つのトランザクションで複数の監査イベントを識別する一意の識別子。 適用対象: SQL Server 2016 (13.x) 以降のバージョン |
client_ip |
nvarchar(128) | クライアント アプリケーションのソース IP。 適用対象: SQL Server 2017 (14.x) 以降のバージョンと Azure SQL Database |
application_name |
nvarchar(128) | 監査イベントの原因となったステートメントを実行したクライアント アプリケーションの名前。 適用対象: SQL Server 2017 (14.x) 以降のバージョンと Azure SQL Database |
duration_milliseconds |
bigint | クエリの実行時間 (ミリ秒単位)。 適用対象: Azure SQL Database と SQL Managed Instance |
response_rows |
bigint | 結果セットで返される行の数。 適用対象: Azure SQL Database と SQL Managed Instance |
affected_rows |
bigint | 実行されたステートメントの影響を受ける行の数。 適用対象: Azure SQL Database のみ |
connection_id |
uniqueidentifier | サーバー内の接続の ID。 適用対象: Azure SQL Database と SQL Managed Instance |
data_sensitivity_information |
nvarchar (4000) | データベースにある分類済みの列に基づく、監査済みクエリが返す情報の種類と機密ラベル。 Azure SQL Database データの検出と分類の詳細について説明します。 適用対象: Azure SQL Database のみ |
host_name |
nvarchar(128) | クライアント コンピューターのホスト名。 |
session_context |
nvarchar (4000) | 現在のセッション コンテキストの一部であるキーと値のペア。 |
client_tls_version |
bigint | クライアントでサポートされている TLS の最小バージョン。 |
client_tls_version_name |
nvarchar(128) | クライアントでサポートされている TLS の最小バージョン。 |
database_transaction_id |
bigint | 現在のセッションの現在のトランザクションのトランザクション ID。 |
ledger_start_sequence_number |
bigint | 行バージョンを作成したトランザクション内の操作のシーケンス番号。 適用対象: Azure SQL Database のみ |
external_policy_permissions_checked |
nvarchar (4000) | 外部承認アクセス許可チェックに関連する情報、監査イベントが生成されたとき、Purview 外部承認ポリシーが評価される場合。 適用対象: Azure SQL Database のみ |
obo_middle_tier_app_id |
varchar(120) | 代理 (OBO) アクセスを使用して Azure SQL Database に接続する中間層アプリケーションのアプリケーション ID。 Null 許容。 OBO アクセスを使用して要求が行われていない場合は、 NULL を返します。適用対象: Azure SQL Database のみ |
is_local_secondary_replica |
bit | True 監査レコードが読み取り専用のローカル セカンダリ レプリカから生成される場合は False 。それ以外の場合は。適用対象: Azure SQL Database のみ |
sys.fn_get_audit_fileに対する機能強化
sys.fn_get_audit_file_v2
関数は、ファイル レベルとレコード レベルの両方で効率的な時間ベースのフィルター処理を導入することで、以前のsys.fn_get_audit_fileよりも大幅に改善されます。 この最適化は、より短い時間範囲を対象とするクエリに特に役立ち、マルチデータベース環境でのパフォーマンスの維持に役立ちます。
デュアル レベルのフィルター処理
ファイル レベルのフィルター処理: 関数は、最初に指定された時間範囲に基づいてファイルをフィルター処理し、スキャンする必要があるファイルの数を減らします。
レコード レベルのフィルター処理: 選択したファイル内でフィルター処理を適用して、関連するレコードのみを抽出します。
パフォーマンスの向上
パフォーマンスの向上は、主に BLOB ファイルのロールオーバー時間とクエリされた時間範囲によって異なります。 監査レコードの均一な分散を想定する場合:
負荷の軽減: スキャンするファイルとレコードの数を最小限に抑えることで、システムの負荷を軽減し、クエリの応答時間を向上させます。
スケーラビリティ: データベースの数が増えてもパフォーマンスを維持するのに役立ちますが、データベースの数が多い環境では、パフォーマンスが低下する可能性があります。
Azure SQL Database 監査の設定の詳細については、「 Get Started with SQL Database auditing(SQL Database 監査の開始)!」を参照してください。
解説
fn_get_audit_file_v2
に渡されたfile_pattern引数が存在しないパスまたはファイルを参照している場合、またはファイルが監査ファイルでない場合は、MSG_INVALID_AUDIT_FILE
エラー メッセージが返されます。fn_get_audit_file_v2
は、APPLICATION_LOG
、SECURITY_LOG
、またはEXTERNAL_MONITOR
オプションを使用して監査を作成するときに使用できません。
アクセス許可
CONTROL DATABASE
アクセス許可が必要です。
サーバー管理者は、サーバー上のすべてのデータベースの監査ログにアクセスできます。
サーバー管理者以外は、現在のデータベースからの監査ログにのみアクセスできます。
上記の条件を満たしていない BLOB はスキップされます (スキップされた BLOB の一覧がクエリ出力メッセージに表示されます)。 この関数は、アクセスが許可されている BLOB からのみログを返します。
例
この例では、特定の Azure Blob Storage の場所から監査ログを取得し、 2023-11-17T08:40:40Z
と 2023-11-17T09:10:40Z
の間のレコードをフィルター処理します。
SELECT *
FROM sys. fn_get_audit_file_v2(
'https://yourstorageaccount.blob.core.windows.net/sqldbauditlogs/server_name/database_name/SqlDbAuditing_ServerAudit/',
DEFAULT,
DEFAULT,
'2023-11-17T08:40:40Z',
'2023-11-17T09:10:40Z')
詳細
システム カタログ ビュー:
- 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)
Transact-SQL:
- CREATE SERVER AUDIT (Transact-SQL)
- 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)