共用方式為


SQL Server Audit 記錄

適用於:SQL Server

SQL Server 的 Audit 功能可讓您稽核伺服器層級和資料庫層級的事件群組和事件。 如需詳細資訊,請參閱 SQL Server 稽核 (資料庫引擎)。 SQL Server。

稽核是由零或多個稽核動作項目所組成,這些項目會記錄到稽核 「目標」 (Target)。 稽核目標可以是二進位檔案、Windows 應用程式事件記錄檔或 Windows 安全性事件記錄檔。 傳送給目標的記錄包含下表所述的項目:

資料行名稱 描述 類型 永遠可使用
event_time 觸發可稽核動作的日期和時間。 datetime2
sequence_number 追蹤單一稽核記錄中太長而無法納入稽核寫入緩衝區內的記錄順序。 int
action_id 動作的識別碼

提示:若要使用 action_id 作為述詞,您必須將它從字元字串轉換為數值。 如需詳細資訊,請參閱 針對 action_id/class_type 述詞篩選 SQL Server Audit
varchar(4)
succeeded 指出觸發事件的動作是否成功。 對於登入事件以外的所有事件,這只會報告權限檢查是否成功或失敗,而不報告作業。
- 1 = 成功
- 0 = 失敗
bit
permission_bitmask 在某些動作中,這是已授與、拒絕或撤銷的許可權。 二元(16)
is_column_permission 指示這是否為資料行層級許可權的旗標。 當permission_bitmask = 0 時傳回 0。
- 1 = 正確
- 0 = 錯誤
bit
session_id 事件發生所在之工作階段的識別碼。 smallint
server_principal_id 動作執行所在之登入環境的識別碼。 int
database_principal_id 動作執行所在之資料庫使用者環境的識別碼。 如果這不適用,則傳回 0。 例如,伺服器作業。 int
target_server_principal_id 執行 GRANT/DENY/REVOKE 作業的伺服器主體。 如果不適用,則傳回 0。 int
target_database_principal_id 執行 GRANT/DENY/REVOKE 作業的資料庫主體。 如果不適用,則傳回 0。 int
object_id 發生稽核之實體的識別碼。 這包括:
伺服器物件
資料庫
資料庫物件
結構描述物件
如果實體是伺服器本身,或稽核未在物件層級執行,則傳回 0。 例如,驗證。
int
class_type 稽核發生的可稽核實體類型。 varchar(2)
session_server_principal_name 工作階段的伺服器主體。 sysname
server_principal_name 目前的登入。 sysname
server_principal_sid 目前的登入 SID。 二元(85)
database_principal_name 目前的使用者。 sysname
target_server_principal_name 動作的目標登入。 如果不適用,則傳回 NULL。 sysname
target_server_principal_sid 目標登入的 SID。 如果不適用,則傳回 NULL。 二元(85)
target_database_principal_name 動作的目標使用者。 如果不適用,則傳回 NULL。 sysname
server_instance_name 稽核發生所在的伺服器執行個體名稱。 使用標準伺服器\實例格式。 sysname
database_name 動作發生所在的資料庫環境。 可為 Null 的。 針對在伺服器層級發生的稽核傳回 Null。 sysname
schema_name 動作發生所在的結構描述環境。 sysname
object_name 稽核發生所在之實體的名稱。 這包括:
伺服器物件
資料庫
資料庫物件
結構描述物件
可為 Null 的。 如果實體是伺服器本身,或未在物件層級執行稽核,則會傳回 NULL。 例如,驗證。
sysname
陳述式 TSQL 陳述式 (如果存在)。 如果不適用,則傳回 NULL。 nvarchar(4000)
additional_information 僅適用於單一事件的唯一資訊會以 XML 形式傳回。 一些可審核的動作包含此類資訊。

一個層級的 TSQL 堆疊將以 XML 格式顯示,適用於具有相關聯的 TSQL 堆疊的動作。 XML 格式將為:
<tsql_stack><frame nest_level = '%u' database_name = '%.*s' schema_name = '%.*s' object_name = '%.*s' /></tsql_stack>
框架nest_level表示框架的當前巢狀層級。 模組名稱以三個部分格式表示 (database_name、schema_name 和 object_name)。 將剖析模組名稱以轉義無效的 xml 字元,例如 '\<'、 、 '>''/''_x'。 他們將被逃脫為 _xHHHH\_。 HHHH 代表字元的四位數十六進位 UCS-2 代碼
可為 Null 的。 當事件沒有報告其他資訊時,會傳回 NULL。
nvarchar(4000)
file_name 記錄來源的稽核記錄檔的路徑和名稱。 瓦查爾(260)
audit_file_offset 適用於:僅限 SQL Server

包含稽核記錄之檔案中的緩衝區位移。
bigint
user_defined_event_id 適用於:SQL Server 2012 (11.x) 和更新版本、Azure SQL 資料庫和 SQL 受控執行個體

使用者定義的事件識別碼會以引數傳遞給sp_audit_write系統事件的 Null (預設值),以及使用者定義事件的非零。 如需詳細資訊,請參閱sp_audit_write (Transact-SQL)。
smallint
user_defined_information 適用於:SQL Server 2012 (11.x) 和更新版本、Azure SQL 資料庫和 SQL 受控執行個體

用來記錄使用者想要使用預存程序記錄 sp_audit_write 在稽核記錄中的任何額外資訊。
nvarchar(4000)
audit_schema_version 一律 1 int
sequence_group_id 適用於:僅限 SQL Server

唯一識別碼
二元(85)
transaction_id 適用於:僅限 SQL Server (從 2016 年開始)

唯一識別碼,用於識別一筆交易中的多個審計事件
bigint
client_ip 適用於:Azure SQL 資料庫 + SQL Server (從 2017 年開始)

用戶端應用程式的來源 IP
恩瓦查爾(128)
application_name 適用於:Azure SQL 資料庫 + SQL Server (從 2017 年開始)

執行導致稽核事件之陳述式的用戶端應用程式名稱
恩瓦查爾(128)
duration_milliseconds 適用於:Azure SQL 資料庫和 SQL 受控執行個體

查詢執行持續時間 (以毫秒為單位)
bigint
response_rows 適用於:Azure SQL 資料庫和 SQL 受控執行個體

結果集中傳回的資料列數目。
bigint
affected_rows 適用於:僅限 Azure SQL 資料庫

受已執行陳述式影響的資料列數。
bigint
connection_id 適用於:Azure SQL 資料庫和 SQL 受控執行個體

伺服器中連線的 ID
GUID
data_sensitivity_information 適用於:僅限 Azure SQL 資料庫

稽核查詢所傳回的資訊類型和敏感度標籤,以資料庫中的分類資料行為基礎。 深入瞭解 Azure SQL 資料庫資料探索和分類
nvarchar(4000)
host_name 用戶端連線的主機名稱 恩瓦查爾(128)
session_context 連線的階段作業環境定義資訊 nvarchar(4000)
client_tls_version 適用於:SQL Server 2022 和更新版本

用戶端連線所使用的 TLS 版本號碼
int
client_tls_version_name 適用於:SQL Server 2022 和更新版本

用戶端連線所使用的 TLS 版本名稱
恩瓦查爾(128)
database_transaction_id 資料庫交易識別碼 bigint
ledger_start_sequence_number 適用於:SQL Server 2022 和更新版本

分類帳作業的分類帳開始序號
bigint
external_policy_permissions_checked 在作業期間檢查的外部原則權限 nvarchar(4000)

備註

某些動作不會填入資料行的值,因為它可能不適用於動作。

SQL Server 稽核會在稽核記錄中儲存字元欄位的 4,000 個字元資料。 當從可審核動作傳回的 additional_information陳述式 值傳回超過 4000 個字元時, sequence_number 直欄會用來將多筆記錄寫入審核報告,以單一審核動作來記錄此資料。 此程序如下:

  • 陳述式欄分為 4,000 個字元。

  • SQL Server Audit 會寫成具有部分資料之稽核記錄的第一個資料列。 所有其他欄位會在每一個資料列中重複。

  • sequence_number值會遞增。

  • 重複執行此程序,直到記錄所有資料為止。

您可以使用 sequence_number 值依序讀取資料列,以及 event_Timeaction_idsession_id 欄來識別動作,以連接資料。