SQL Server Audit 記錄

適用於:SQL Server

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

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

欄位名稱 描述 類型 隨時可用
event_time 觸發可稽核動作的日期和時間。 datetime2 是
序列號碼 追蹤單一稽核記錄中太長而無法納入稽核寫入緩衝區內的記錄順序。 int 是
action_id 動作的識別碼

提示:若要使用 action_id 作為述詞,您必須將它從字元字串轉換為數值。 如需詳細資訊,請參閱 根據 action_id/class_type 條件篩選 SQL Server Audit。
varchar(4) 是
成功 指出觸發事件的動作是否成功。 對於登入事件以外的所有事件,這只會報告權限檢查是否成功或失敗,而不報告作業。
- 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 操作所執行的資料庫主體。DENYREVOKE 如果不適用,則傳回 0。 int 否
object_id 發生稽核之實體的識別碼。 這包括:
伺服器物件
資料庫
資料庫物件
綱要物件
如果實體是伺服器本身,或稽核未在物件層級執行,則傳回 0。 例如,驗證。
int 否
class_type 稽核發生的可稽核實體類型。 varchar(2) 是
session_server_principal_name 工作階段的伺服器主體。 sysname 是
server_principal_name 當前登入 sysname 是
server_principal_sid 目前的登入 SID。 varbinary(85) 是
database_principal_name 目前的使用者。 sysname 否
目標伺服器主體名稱 動作的登入目標。 如果不適用,則傳回 NULL。 sysname 否
target_server_principal_sid 目標登入的 SID。 如果不適用,則傳回 NULL。 varbinary(85) 否
目標資料庫主體名稱 動作的目標使用者。 如果不適用,則傳回 NULL。 sysname 否
server_instance_name 稽核發生所在的伺服器執行個體名稱。 使用標準伺服器\實例格式。 sysname 是
database_name 動作發生所在的資料庫環境。 可為 Null 的。 針對在伺服器層級發生的稽核傳回 NULL。 sysname 否
schema_name 動作發生所在的結構描述環境。 sysname 否
object_name 稽核發生所在之實體的名稱。 這包括:
伺服器物件
資料庫
資料庫物件
綱要物件
可為 Null 的。 如果實體是伺服器本身,或未在物件層級執行稽核,則會傳回 NULL。 例如,驗證。
sysname 否
陳述式 如果有的話,T-SQL 陳述式。 如果不適用,則傳回 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_writeNull(預設),而使用者定義事件使用非零值。 如需詳細資訊,請參閱sp_audit_write (Transact-SQL)。
smallint 否
使用者定義資訊 適用於:SQL Server 2012 (11.x) 和更新版本、Azure SQL 資料庫和 SQL 受控執行個體

用於讓使用者透過使用 sp_audit_write 預存程序來在稽核記錄中記錄任何額外資訊。
nvarchar(4000) 否
audit_schema_version 永遠為 1 int 是
sequence_group_id 適用於:僅限 SQL Server

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

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

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

執行導致稽核事件之陳述式的用戶端應用程式名稱
nvarchar(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 否
資料敏感信息 適用於:僅限 Azure SQL 資料庫

根據資料庫中的分類資料行,稽核查詢返回的資訊類型和敏感度標籤。 深入瞭解 Azure SQL 資料庫資料探索和分類
nvarchar(4000) 否
host_name 用戶端連線的主機名稱 nvarchar(128) 否
會話上下文 連線的工作階段上下文資訊 nvarchar(4000) 否
用戶端_TLS_版本 適用於:SQL Server 2022 和更新版本

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

用戶端連線所使用的 TLS 版本名稱
nvarchar(128) 否
database_transaction_id 資料庫交易識別碼 bigint 否
賬本啟始序列號 適用於:SQL Server 2022 和更新版本

分類帳作業的分類帳開始序號
bigint 否
外部政策權限檢查完成 操作過程中檢查的外部政策權限 nvarchar(4000) 否

備註

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

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

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

  • SQL Server Audit 最初會以不完整的資料寫入稽核記錄的第一個資料列。 所有其他欄位會在每一個資料列中重複。

  • sequence_number值會遞增。

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

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