適用於: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_Time、 action_id 和 session_id 欄來識別動作,以連接資料。
相關內容
- 建立伺服器稽核 (Transact-SQL)
- 變更伺服器稽核 (Transact-SQL)
- 捨棄伺服器稽核 (Transact-SQL)
- 建立伺服器稽核規格 (Transact-SQL)
- 變更伺服器稽核規格 (Transact-SQL)
- 捨棄伺服器稽核規格 (Transact-SQL)
- 建立資料庫稽核規格 (Transact-SQL)
- 變更資料庫稽核規格 (Transact-SQL)
- 捨棄資料庫稽核規格 (Transact-SQL)
- 變更授權 (Transact-SQL)
- sys.fn_get_audit_file (Transact-SQL)
- sys.server_audits (Transact-SQL)
- sys.server_file_audits (Transact-SQL)
- 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)
- sys.dm_server_audit_status (Transact-SQL)
- sys.dm_audit_actions (Transact-SQL)
- sys.dm_audit_class_type_map (Transact-SQL)