共用方式為


sys.fn_get_audit_file (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics

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

注意

針對 Azure SQL 資料庫,請考慮改用 sys.fn_get_audit_file_v2sys.fn_get_audit_file_v2 引進檔案和記錄層級的時間型篩選,可提供顯著的效能改善,特別是針對以特定時間範圍為目標的查詢。

Transact-SQL 語法慣例

語法

fn_get_audit_file ( file_pattern ,
    { default | initial_file_name | NULL } ,
    { default | audit_record_offset | NULL } )

引數

file_pattern

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

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

此自變數必須同時包含路徑(驅動器號或網路共用),以及可包含通配符的檔名。 單一星號 • 可用來從稽核檔案集收集多個檔案。 例如:

  • \<path>\* - 收集指定位置中的所有稽核檔案。

  • <path>\LoginsAudit_{GUID}* - 收集具有指定名稱和 GUID 組的所有稽核檔案。

  • <path>\LoginsAudit_{GUID}_00_29384.sqlaudit - 收集特定的稽核檔案。

initial_file_name

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

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

audit_record_offset

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

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

傳回的數據表

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

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

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

1 = true
0 = false
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。

適用於:僅限 SQL Server
user_defined_event_id smallint 傳遞做為自變數給 sp_audit_write的使用者定義事件標識碼。 NULL 針對系統事件 (預設值) 和使用者定義事件的非零。 如需詳細資訊,請參閱 sp_audit_write

適用於:SQL Server 2012 (11.x) 和更新版本、Azure SQL 資料庫 和 SQL 受管理執行個體
user_defined_information nvarchar(4000) 用來記錄使用者想要使用 sp_audit_write 預存程式在稽核記錄檔中記錄的任何額外資訊。

適用於:SQL Server 2012 (11.x) 和更新版本、Azure SQL 資料庫 和 SQL 受管理執行個體
audit_schema_version int 一律為 1
sequence_group_id varbinary 唯一的 識別碼。

適用於:SQL Server 2016 (13.x) 和更新版本
transaction_id bigint 用來識別單一交易中多個稽核事件的唯一標識符。

適用於:SQL Server 2016 (13.x) 和更新版本
client_ip nvarchar(128) 用戶端應用程式的來源IP。

適用於:SQL Server 2017 (14.x) 和更新版本,以及 Azure SQL 資料庫
application_name nvarchar(128) 執行造成稽核事件之語句的用戶端應用程式名稱。

適用於:SQL Server 2017 (14.x) 和更新版本,以及 Azure SQL 資料庫
duration_milliseconds bigint 查詢執行持續時間以毫秒為單位。

適用於:Azure SQL 資料庫 和 SQL 受管理執行個體
response_rows bigint 結果集中傳回的數據列數目。

適用於:Azure SQL 資料庫 和 SQL 受管理執行個體
affected_rows bigint 受執行語句影響的數據列數目。

適用於:僅限 Azure SQL 資料庫
connection_id uniqueidentifier 伺服器中聯機的標識碼。

適用於:Azure SQL 資料庫 和 SQL 受管理執行個體
data_sensitivity_information nvarchar(4000) 根據資料庫中以分類的資料行,由稽核的查詢所傳回的資訊類型與敏感度標籤。 深入瞭解 Azure SQL 資料庫 數據探索和分類

適用於:僅限 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 建立數據列版本之交易內的作業序號。

適用於:僅限 Azure SQL 資料庫
external_policy_permissions_checked nvarchar(4000) 當產生稽核事件時,與外部授權許可權檢查相關的資訊,並評估 Purview 外部授權原則。

適用於:僅限 Azure SQL 資料庫
obo_middle_tier_app_id varchar(120) 使用代理者 (OBO) 存取連線到 Azure SQL 資料庫 之仲介層應用程式的應用程式識別碼。 可為 Null。 NULL如果要求不是使用 OBO 存取進行,則傳回 。

適用於:僅限 Azure SQL 資料庫
is_local_secondary_replica bit True 如果稽核記錄源自唯讀本機次要複本,則為 , False 否則為 。

適用於:僅限 Azure SQL 資料庫

備註

  • 如果傳遞至fn_get_audit_file的 file_pattern 自變數參考不存在的路徑或檔案,或檔案不是稽核檔案,則會MSG_INVALID_AUDIT_FILE傳回錯誤訊息。

  • fn_get_audit_file使用、 SECURITY_LOGEXTERNAL_MONITOR 選項建立APPLICATION_LOG稽核時無法使用。

權限

SQL Server 2019 (15.x) 和舊版需要 CONTROL SERVER 伺服器的許可權。

SQL Server 2022 (16.x) 和更新版本需要 VIEW SERVER SECURITY AUDIT 伺服器的許可權。

範例

此範例會從名為 \\serverName\Audit\HIPAA_AUDIT.sqlaudit的檔案讀取。

SELECT *
FROM sys.fn_get_audit_file(
    '\\serverName\Audit\HIPAA_AUDIT.sqlaudit',
    DEFAULT,
    DEFAULT
);
GO

如需如何建立稽核的完整範例,請參閱 SQL Server 稽核 (資料庫引擎)

限制

sys.fn_get_audit_file [建立數據表為選取] 內選取數據列或 INSERT INTO 是在 Azure Synapse Analytics 上執行時的限制。 雖然查詢順利完成,而且沒有出現錯誤訊息,但數據表中沒有使用CTAS或 INSERT INTO建立的數據列。

其他相關資訊

系統目錄檢視:

Transact-SQL: