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_v2。 sys.fn_get_audit_file_v2
引進檔案和記錄層級的時間型篩選,可提供顯著的效能改善,特別是針對以特定時間範圍為目標的查詢。
語法
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自變數必須包含有效的專案,或必須包含 default
或 NULL
值。
audit_record_offset
使用為 initial_file_name指定的檔案,指定已知位置。 使用這個自變數時,函式會開始讀取緩衝區的第一筆記錄,緊接在指定的位移之後。
audit_record_offset自變數必須包含有效的專案,或必須包含 default
或 NULL
值。 類型為 bigint。
傳回的數據表
下表描述此函式可傳回的稽核檔案內容。
資料行名稱 | 類型 | 描述 |
---|---|---|
event_time |
datetime2 | 引發可稽核動作的日期和時間。 不可為 Null。 |
sequence_number |
int | 追蹤單一稽核記錄中太長而無法納入稽核寫入緩衝區內的記錄順序。 不可為 Null。 |
action_id |
varchar(4) | 動作的標識碼。 不可為 Null。 |
succeeded |
bit | 指示觸發此事件的動作是否成功。 不可為 Null。 對於登入事件以外的所有事件,這隻會報告許可權檢查是否成功或失敗,而不是作業。1 = success0 = fail |
permission_bitmask |
varbinary(16) | 在某些動作中,此位掩碼是已授與、拒絕或撤銷的許可權。 |
is_column_permission |
bit | 指出這是否為資料行層級權限的旗標。 不可為 Null。 0 當傳permission_bitmask = 0 回 。1 = true0 = 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_name 、 schema_name 和 object_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_LOG
或EXTERNAL_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
建立的數據列。
其他相關資訊
系統目錄檢視:
- 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)