適用於:Azure SQL Database
Microsoft Fabric
中的倉庫Microsoft Fabric 中的 SQL 資料庫
系統 sys.fn_get_audit_file_v2 功能設計用來比前代 sys.fn_get_audit_file更高效的稽核日誌資料擷取。 函式會在檔案和記錄層級引進以時間為基礎的篩選,以提供顯著的效能改善,特別是針對以特定時間範圍為目標的查詢。
回傳由伺服器稽核建立的稽核檔案資訊。 如需詳細資訊,請參閱 SQL Server 稽核 (資料庫引擎)。
- 如需設定 Azure SQL 資料庫 稽核的詳細資訊,請參閱開始使用 SQL 資料庫 稽核。
- 有關設定 Fabric Data Warehouse 稽核的資訊,請參閱 Fabric Data Warehouse 中的 SQL 稽核日誌。
- 關於在 Fabric 審計中設定 SQL 資料庫的資訊,請參見 SQL 資料庫中的 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自變數必須包含有效的專案,或必須包含 default 或 NULL 值。
audit_record_offset
適用於:僅限 Azure SQL 資料庫
使用為 initial_file_name指定的檔案,指定已知位置。 使用這個自變數時,函式會開始讀取緩衝區的第一筆記錄,緊接在指定的位移之後。
audit_record_offset自變數必須包含有效的專案,或必須包含 default 或 NULL 值。
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_name、 schema_name和 object_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_v2或 APPLICATION_LOG 選項建立SECURITY_LOG時,該EXTERNAL_MONITOR函數無法使用。
目前在 Fabric Data Warehouse 中,你無法存取單一檔案,只能存取稽核資料夾。 以下參數不支援倉庫項目的 SQL 審計: file_pattern, initial_file_name, audit_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。
在布理傳送門中,取回你的 workspaceID 和 warehouseID:
-
<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')
其他相關資訊
系統目錄檢視:
- 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:
- 創建伺服器稽核 (Transact-SQL)
- 變更伺服器審核(Transact-SQL)
- DROP SERVER AUDIT (Transact-SQL)
- 建立伺服器稽核規格 (Transact-SQL)
- ALTER SERVER AUDIT SPECIFICATION (Transact-SQL)
- DROP SERVER AUDIT SPECIFICATION (Transact-SQL)
- 建立資料庫稽核規格 (Transact-SQL)
- ALTER DATABASE AUDIT SPECIFICATION (Transact-SQL)
- DROP DATABASE AUDIT SPECIFICATION (Transact-SQL)
- ALTER AUTHORIZATION (Transact-SQL)