次の方法で共有


sys.fn_get_audit_file_v2(Transact-SQL)

対象者:Azure SQL DatabaseMicrosoft FabricのWarehouseMicrosoft FabricにおけるSQLデータベース

sys.fn_get_audit_file_v2システム機能は、前モデルのsys.fn_get_audit_fileに比べて監査ログデータを効率的に取得するよう設計されています。 この関数では、ファイル レベルとレコード レベルの両方で時間ベースのフィルター処理が導入され、特に特定の時間範囲を対象とするクエリのパフォーマンスが大幅に向上します。

サーバー監査によって作成された監査ファイルから情報を返します。 詳細については、「SQL Server Audit (データベース エンジン)」を参照してください。

Transact-SQL 構文表記規則

構文

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

適用対象: Azure SQL Database のみ

読み取り対象に設定する監査ファイルのディレクトリまたはパスとファイル名を指定します。 file_patternnvarchar(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

適用対象: Azure SQL Database のみ

監査レコードの読み取りを開始する監査ファイル セット内の特定のファイルのパスと名前を指定します。 initial_file_namenvarchar(260)です。

initial_file_name引数には、有効なエントリが含まれているか、defaultまたはNULL値を含む必要があります。

audit_record_offset

適用対象: Azure SQL Database のみ

initial_file_nameに指定されたファイルの既知の場所を指定します。 この引数を使用すると、関数は、指定されたオフセットの直後にあるバッファーの最初のレコードで読み取りを開始します。

audit_record_offset引数には、有効なエントリが含まれているか、defaultまたはNULL値を含む必要があります。 audit_record_offsetbigint です。

start_time

ログをフィルター処理するための開始時刻。 この時刻より前のレコードは除外されます。

end_time

ログをフィルター処理するための終了時刻。 この時刻より後のレコードは除外されます。

返されるテーブル

次の表では、この関数によって返される監査ファイルの内容について説明します。

列名 タイプ 説明
event_time datetime2 監査可能なアクションが発生した日時。 NULL 値は許可されません。
sequence_number int 大きすぎて監査の書き込みバッファーに収まらなかった 1 つの監査レコード内のレコードの順序を追跡します。 NULL 値は許可されません。
action_id varchar (4) アクションの ID。 NULL 値は許可されません。
succeeded bit イベントをトリガーしたアクションが成功したかどうかを示します。 NULL 値は許可されません。 ログイン イベント以外のすべてのイベントで、操作ではなく、権限チェックが成功したか失敗したかのみを報告します。

1 = 成功
0 = 失敗
permission_bitmask varbinary(16) 一部のアクションでは、このビットマスクは許可、拒否、または取り消されたアクセス許可です。
is_column_permission bit 列レベルのアクセス許可であるかどうかを示すフラグ。 NULL 値は許可されません。 0 permission_bitmask = 時の0を返します。

1 = 真
0 = 偽
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_nameschema_name、および object_name) で表されます。 モジュール名は、 <>/_xなどの無効な XML 文字をエスケープするために解析されます。 これらは _xHHHH_としてエスケープされます。 HHHHは、文字の 4 桁の 16 進数 UCS-2 コードを表します。 Null 許容。 イベントによって報告された追加情報がない場合に NULL を返します。
file_name varchar(260) レコードの取得元の監査ログ ファイルのパスと名前。 NULL 値は許可されません。
audit_file_offset bigint 監査レコードを含むファイル内のバッファー オフセット。 NULL 値は許可されません。
user_defined_event_id smallint sp_audit_writeの引数として渡されるユーザー定義のイベント ID。 NULL システム イベント (既定) の場合は 0 以外、ユーザー定義イベントの場合は 0 以外。 詳細については、「 sp_audit_write (Transact-SQL)」を参照してください。
user_defined_information nvarchar (4000) sp_audit_write ストアド プロシージャを使用して、ユーザーが監査ログに記録する追加情報を記録するために使用します。
audit_schema_version int 常に 1 です。
sequence_group_id varbinary 一意識別子。<
transaction_id bigint 1 つのトランザクションで複数の監査イベントを識別する一意の識別子。
client_ip nvarchar(128) クライアント アプリケーションのソース IP。
application_name nvarchar(128) 監査イベントの原因となったステートメントを実行したクライアント アプリケーションの名前。
duration_milliseconds bigint クエリの実行時間 (ミリ秒単位)。
response_rows bigint 結果セットで返された行数。<
affected_rows bigint 実行されたステートメントの影響を受ける行の数。
connection_id uniqueidentifier サーバー内の接続の ID。
data_sensitivity_information nvarchar (4000) データベースにある分類済みの列に基づく、監査済みクエリが返す情報の種類と機密ラベル。 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 行バージョンを作成したトランザクション内の操作のシーケンス番号。
external_policy_permissions_checked nvarchar (4000) 外部承認アクセス許可チェックに関連する情報、監査イベントが生成されたとき、Purview 外部承認ポリシーが評価される場合。
obo_middle_tier_app_id varchar(120) 代理アクセス(OBO)で接続する中間層アプリケーションのアプリケーションID。 Null 許容。 OBO アクセスを使用して要求が行われていない場合は、 NULL を返します。
is_local_secondary_replica bit True 監査レコードが読み取り専用のローカル セカンダリ レプリカから生成される場合は False 。それ以外の場合は。

sys.fn_get_audit_fileに対する機能強化

sys.fn_get_audit_file_v2関数は、ファイル レベルとレコード レベルの両方で効率的な時間ベースのフィルター処理を導入することで、以前のsys.fn_get_audit_fileよりも大幅に改善されます。 この最適化は、より短い時間範囲を対象とするクエリに特に役立ち、マルチデータベース環境でのパフォーマンスの維持に役立ちます。

デュアル レベルのフィルター処理

ファイル レベルのフィルター処理: 関数は、最初に指定された時間範囲に基づいてファイルをフィルター処理し、スキャンする必要があるファイルの数を減らします。

レコード レベルのフィルター処理: 選択したファイル内でフィルター処理を適用して、関連するレコードのみを抽出します。

パフォーマンスの向上

パフォーマンスの向上は、主に BLOB ファイルのロールオーバー時間とクエリされた時間範囲によって異なります。 監査レコードの均一な分散を想定する場合:

  • 負荷の軽減: スキャンするファイルとレコードの数を最小限に抑えることで、システムの負荷を軽減し、クエリの応答時間を向上させます。

  • スケーラビリティ: データベースの数が増えてもパフォーマンスを維持するのに役立ちますが、データベースの数が多い環境では、パフォーマンスが低下する可能性があります。

解説

に渡されたfn_get_audit_file_v2引数が存在しないパスまたはファイルを参照している場合、またはファイルが監査ファイルでない場合は、MSG_INVALID_AUDIT_FILEエラー メッセージが返されます。

fn_get_audit_file_v2機能は、監査がAPPLICATION_LOGSECURITY_LOG、またはEXTERNAL_MONITORオプションで作成された場合は使えません。

現在、Fabric Data Warehouseでは個々のファイルにはアクセスできず、監査フォルダのみにアクセスできます。 倉庫アイテムのSQL Auditでは以下の引数がサポートされていません: file_patterninitial_file_nameaudit_record_offset

アクセス許可

Azure SQL Database における必要な権限

CONTROL DATABASE アクセス許可が必要です。

  • サーバー管理者は、サーバー上のすべてのデータベースの監査ログにアクセスできます。

  • サーバー管理者以外は、現在のデータベースからの監査ログにのみアクセスできます。

  • 上記の条件を満たしていない BLOB はスキップされます (スキップされた BLOB の一覧がクエリ出力メッセージに表示されます)。 この関数は、アクセスが許可されている BLOB からのみログを返します。

Fabric SQLデータベースで必要な権限

Fabricワークスペースの役割で監査を管理するには、ユーザーはFabricワークスペース のContributor 役割のメンバーシップ以上の権限を持っている必要があります。 SQL アクセス許可を使用して監査を管理するには:

  • データベース監査を構成するには、ユーザーに ALTER ANY DATABASE AUDIT 権限が必要です。
  • T-SQL を使用して監査ログを表示するには、ユーザーに VIEW DATABASE SECURITY AUDIT 権限が必要です。

詳細については、「 Fabric SQLデータベースにおける監査」をご覧ください。

Fabric Data Warehouseで必要な権限

ユーザーはFabricアイテムの許可 Audit 持っている必要があります。 詳細については、「アクセス許可」を参照してください。

A。 Azure SQL Database の SQL 監査ログを閲覧

この例では、特定の Azure Blob Storage の場所から監査ログを取得し、 2023-11-17T08:40:40Z2023-11-17T09:10:40Zの間のレコードをフィルター処理します。

SELECT *
FROM sys.fn_get_audit_file_v2(
    'https://<storage_account>.blob.core.windows.net/sqldbauditlogs/server_name/database_name/SqlDbAuditing_ServerAudit/',
    DEFAULT,
    DEFAULT,
    '2023-11-17T08:40:40Z',
    '2023-11-17T09:10:40Z')

B: FabricデータウェアハウスのSQL監査ログを見る

この例は、OneLakeフォルダから現在のワークスペースと倉庫に合わせた監査ログを取得し、 2023-11-17T08:40:40Z2023-11-17T09:10:40Z間でレコードをフィルタリングします。

ファブリックポータルで workspaceID を取り出し、 warehouseID:

  • <workspaceID>: Fabricポータルであなたの作業スペースにアクセスしてください。 /groups/セクションのURLでワークスペースGUIDを見つけるか、既存の倉庫でSELECT @@SERVERNAMEを実行することで見つけてください。 /groups/URLの後に/me/がついている場合は、デフォルトのワークスペースを使っており、現在Fabric Data Warehouse用のSQL Auditはデフォルトのワークスペースではサポートされていません。
  • <warehouseID>:ファブリックポータルの倉庫を訪れてください。 /warehouses/セクションのURLで倉庫IDを見つけてください。
SELECT *
FROM sys. fn_get_audit_file_v2(
    'https://onelake.blob.fabric.microsoft.com/{workspaceId}/{warehouseId}/Audit/sqldbauditlogs/',
    DEFAULT,
    DEFAULT,
    '2023-11-17T08:40:40Z',
    '2023-11-17T09:10:40Z')

C. Microsoft FabricのSQLデータベースのSQL監査ログを見る

この例は、Microsoft FabricのOneLakeから 2025-11-17T08:40:40Z2025-11-17T09:10:40Z間の監査ログを取得します。

次のスクリプトでは、Microsoft FabricのワークスペースIDとデータベースIDを提供する必要があります。 どちらもFabricポータルのURLで見つけることができます。 たとえば、 https://fabric.microsoft.com/groups/<fabric workspace id>/sqldatabases/<fabric sql database id>と指定します。 URLの最初の一意識別子文字列はFabricワークスペースIDで、二つ目はSQLデータベースIDです。

  • <fabric_workspace_id>を Fabric ワークスペース ID に置き換えます。 ワークスペースの ID は URL で簡単に見つけることができます。これは、ブラウザー ウィンドウの / の後の 2 つの /groups/ 文字内の一意の文字列です。
  • <fabric sql database id> を Fabric データベース ID の SQL データベースに置き換えます。 データベース項目の ID は URL で簡単に見つけることができます。これは、ブラウザー ウィンドウで/した後の 2 つの/sqldatabases/文字内の一意の文字列です。
SELECT *
FROM sys.fn_get_audit_file_v2(
    'https://onelake.blob.fabric.microsoft.com/<fabric workspace id>/<fabric sql database id>/Audit/sqldbauditlogs/',
    DEFAULT,
    DEFAULT,
    '2025-11-17T08:40:40Z',
    '2025-11-17T09:10:40Z')

詳細

システム カタログ ビュー:

Transact-SQL: