共用方式為


sys.fn_get_audit_file_v2 (Transact-SQL)

適用於:Azure SQL DatabaseMicrosoft Fabric 中的倉庫Microsoft Fabric 中的 SQL 資料庫

系統 sys.fn_get_audit_file_v2 功能設計用來比前代 sys.fn_get_audit_file更高效的稽核日誌資料擷取。 函式會在檔案和記錄層級引進以時間為基礎的篩選,以提供顯著的效能改善,特別是針對以特定時間範圍為目標的查詢。

回傳由伺服器稽核建立的稽核檔案資訊。 如需詳細資訊,請參閱 SQL Server 稽核 (資料庫引擎)

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 資料庫

指定要讀取之稽核檔案的目錄或路徑和檔名。 file_pattern是 nvarchar(260)

傳遞沒有檔案名模式的路徑會產生錯誤。

這個自變數可用來指定 Blob URL(包括記憶體端點和容器)。 雖然它不支援星號通配符,但您可以使用部分檔案 (blob) 名稱前置詞 (而不是完整 Blob 名稱)來收集以這個前置詞開頭的多個檔案 (blobs)。 例如:

  • <Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/ - 收集特定資料庫的所有稽核檔案(Blob)。

  • <Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/<AuditName>/<CreationDate>/<FileName>.xel - 收集特定的稽核檔案 (Blob)。

initial_file_name

適用於:僅限 Azure SQL 資料庫

指定稽核檔案集中特定檔案的路徑和名稱,以開始讀取稽核記錄。 initial_file_name是 nvarchar(260)

initial_file_name自變數必須包含有效的專案,或必須包含 defaultNULL 值。

audit_record_offset

適用於:僅限 Azure SQL 資料庫

使用為 initial_file_name指定的檔案,指定已知位置。 使用這個自變數時,函式會開始讀取緩衝區的第一筆記錄,緊接在指定的位移之後。

audit_record_offset自變數必須包含有效的專案,或必須包含 defaultNULL 值。 audit_record_offset是 bigint

start_time

篩選記錄的開始時間。 在此時間前的記錄會排除。

end_time

篩選記錄的結束時間。 此時之後的記錄會排除。

傳回的資料表

下表描述此函式所傳回的稽核檔案內容。

資料行名稱 類型 描述
event_time datetime2 引發可稽核動作的日期和時間。 不可為 Null。
sequence_number int 追蹤單一稽核記錄中太長而無法納入稽核寫入緩衝區內的記錄順序。 不可為 Null。
action_id varchar(4) 動作的標識碼。 不可為 Null。
succeeded bit 指示觸發此事件的動作是否成功。 不可為 Null。 對於登入事件以外的所有事件,這隻會報告許可權檢查是否成功或失敗,而不是作業。

1 = 成功
0 = 失敗
permission_bitmask varbinary(16) 在某些動作中,此位掩碼是已授與、拒絕或撤銷的許可權。
is_column_permission bit 指出這是否為資料行層級權限的旗標。 不可為 Null。 0當傳permission_bitmask = 0回 。

1 = 真
0 = 假
session_id smallint 事件發生所在之工作階段的識別碼。 不可為 Null。
server_principal_id int 動作執行所在之登入環境的識別碼。 不可為 Null。
database_principal_id int 動作執行所在之資料庫使用者環境的識別碼。 不可為 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 發生稽核之實體的標識碼,其中包含下列物件:

- 伺服器物件
-資料庫
- 資料庫物件
- 架構物件

不可為 Null。 0如果實體是伺服器本身,或未在物件層級執行稽核,則傳回 。 例如,驗證。
class_type varchar(2) 稽核發生的可稽核實體類型。 不可為 Null。
session_server_principal_name sysname 會話的伺服器主體。 可為 Null。 傳回連線到 資料庫引擎 實例的原始登入識別,以防有明確或隱含的內容切換。
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 目標登入的 SID。 可為 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 堆疊的一個層級會以 XML 格式顯示,這些動作具有與其相關聯的 T-SQL 堆疊。 XML 格式為: <tsql_stack><frame nest_level = '%u' database_name = '%.*s' schema_name = '%.*s' object_name = '%.*s' /></tsql_stack>

frame nest_level 表示框架的目前巢狀層級。 模組名稱以三部分格式表示(database_nameschema_nameobject_name)。 模組名稱會剖析為逸出無效的 XML 字元,例如 <、、>/_x。 它們會逸出為 _xHHHH_。 代表 HHHH 字元的四位數十六進位UCS-2程式碼。 可為 Null。 NULL當事件沒有報告其他資訊時,會傳回 。
file_name varchar(260) 記錄的來源稽核記錄檔路徑和名稱。 不可為 Null。
audit_file_offset bigint 包含稽核記錄之檔案中的緩衝區位移。 不可為 Null。
user_defined_event_id smallint 傳遞做為自變數給 sp_audit_write的使用者定義事件標識碼。 NULL 針對系統事件 (預設值) 和使用者定義事件的非零。 如需詳細資訊,請參閱 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 用來識別單一交易中多個稽核事件的唯一標識符。
client_ip nvarchar(128) 用戶端應用程式的來源IP。
application_name nvarchar(128) 執行造成稽核事件之語句的用戶端應用程式名稱。
duration_milliseconds bigint 查詢執行持續時間以毫秒為單位。
response_rows bigint 結果集中回傳的列數。<
affected_rows bigint 受執行語句影響的數據列數目。
connection_id uniqueidentifier 伺服器中聯機的標識碼。
data_sensitivity_information nvarchar(4000) 根據資料庫中以分類的資料行,由稽核的查詢所傳回的資訊類型與敏感度標籤。 深入瞭解 Azure SQL 資料庫 數據探索和分類
host_name nvarchar(128) 用戶端電腦的主機名。
session_context nvarchar(4000) 屬於目前工作階段內容的索引鍵/值組。
client_tls_version bigint 用戶端支援的最低 TLS 版本。
client_tls_version_name nvarchar(128) 用戶端支援的最低 TLS 版本。
database_transaction_id bigint 目前工作階段中目前交易的交易標識碼。
ledger_start_sequence_number bigint 建立數據列版本之交易內的作業序號。
external_policy_permissions_checked nvarchar(4000) 當產生稽核事件時,與外部授權許可權檢查相關的資訊,並評估 Purview 外部授權原則。
obo_middle_tier_app_id varchar(120) 中層應用程式的應用程式 ID,該應用程式透過代理存取(OBO)連線。 可為 Null。 NULL如果要求不是使用 OBO 存取進行,則傳回 。
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傳回錯誤訊息。

當審計以 、 fn_get_audit_file_v2APPLICATION_LOG 選項建立SECURITY_LOG時,該EXTERNAL_MONITOR函數無法使用。

目前在 Fabric Data Warehouse 中,你無法存取單一檔案,只能存取稽核資料夾。 以下參數不支援倉庫項目的 SQL 審計: file_patterninitial_file_nameaudit_record_offset, 。

權限

Azure SQL Database 需要的權限

需要 CONTROL DATABASE 權限。

  • 伺服器管理員可以存取伺服器上所有資料庫的稽核記錄。

  • 非伺服器管理員只能從目前的數據庫存取稽核記錄。

  • 略過不符合上述準則的 Blob(查詢輸出訊息中會顯示略過的 Blob 清單)。 函式只會從允許存取的 Blob 傳回記錄。

Fabric SQL 資料庫所需的權限

若要使用 Fabric 工作區角色管理稽核,使用者必須擁有 Fabric 工作區 貢獻 者角色或更高權限。 使用 SQL 權限管理稽核:

  • 要設定資料庫稽核,使用者必須擁有 ALTER ANY DATABASE AUDIT 權限。
  • 要使用 T-SQL 查看稽核日誌,使用者必須擁有 VIEW DATABASE SECURITY AUDIT 權限。

欲了解更多資訊,請參閱 Fabric SQL 資料庫中的審計

Fabric 資料倉儲所需的權限

使用者必須擁有 Fabric 項目 Audit 權限。 如需詳細資訊,請參閱 權限

範例

A。 View SQL audit logs for Azure SQL Database

此範例會從特定 Azure Blob 儲存體 位置擷取稽核記錄,篩選和2023-11-17T08:40:40Z之間的2023-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 Data Warehouse 的 SQL 稽核日誌

此範例從 OneLake 資料夾中取得與目前工作區及倉庫對齊的稽核日誌,並在與 2023-11-17T08:40:40Z之間篩選記錄2023-11-17T09:10:40Z

在布理傳送門中,取回你的 workspaceIDwarehouseID

  • <workspaceID>:請造訪 Fabric 入口網站中的您的工作空間。 在該 /groups/ 區段後的網址中找到工作區 GUID,或是在現有倉庫中執行 SELECT @@SERVERNAME 。 如果你 /groups/ 的 URL 後面是 /me/,你正在使用預設工作區,而目前 Fabric Data Warehouse 的 SQL Audit 在預設工作區中並不支援。
  • <warehouseID>:造訪你的倉庫,進入布料入口。 在該 /warehouses/ 區塊後的網址中找到倉庫 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 入口網站的網址中找到。 例如: https://fabric.microsoft.com/groups/<fabric workspace id>/sqldatabases/<fabric sql database id> 。 URL 中的第一個唯一識別字串是 Fabric 工作區 ID,第二個唯一識別字串是 SQL 資料庫 ID。

  • 請將 <fabric_workspace_id> 替換為您的 Fabric 工作區識別碼。 您可以在 URL 中輕鬆找到工作區的識別碼,這是瀏覽器視窗中之後//groups/個字元內的唯一字串。
  • <fabric sql database id> 替換為 SQL 資料庫的 Fabric 資料庫識別碼。 您可以在 URL 中輕鬆找到資料庫項目的 ID,它是瀏覽器視窗中兩個 / 字元 /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: