僅限附加的總帳資料表

適用於: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL 受控執行個體

僅附加總帳資料表只允許在您的資料表上執行 INSERT 作業,這可確保授權使用者(例如資料庫管理員)無法透過傳統資料操作語言作業改變資料。 僅附加總帳資料表很適合不會更新或刪除記錄的系統,例如,需要將資料從區塊鏈複寫到資料庫的安全性資訊事件以及管理系統或區塊鏈系統。 因為僅附加資料表沒有任何 UPDATEDELETE 作業,所以就不需要像可更新的總帳資料表一樣要有對應的歷程記錄。

Diagram that shows architecture of ledger tables.

您可以在 CREATE TABLE (Transact-SQL) 陳述式中指定 LEDGER = ON 引數並指定 APPEND_ONLY = ON 選項,藉此建立僅附加總帳資料表。

重要

將資料表建立為總帳資料表之後,就無法將還原為沒有總帳功能的資料表。 因此,攻擊者無法暫時移除總帳功能、對資料表進行變更,然後再重新啟用總帳功能。

僅附加總帳資料表結構描述

僅附加資料表必須具有下列 GENERATED ALWAYS 資料行,其中所含的中繼資料指出哪些交易對資料表進行了變更,以及交易更新資料列的作業順序。 當您建立僅附加總帳資料表時,GENERATED ALWAYS 資料行將會在您的總帳資料表中建立。 此資料適合用來鑑識,以了解資料在一段時間內的插入方式。

如果您沒有在 CREATE TABLE 陳述式中指定 GENERATED ALWAYS 資料行的定義,系統會使用下列預設名稱自動新增定義。

預設資料行名稱 資料類型 描述
ledger_start_transaction_id BIGINT 建立資料列版本的交易 ID
ledger_start_sequence_number BIGINT 建立資料列版本的交易所執行的作業序號

總帳檢視

針對每個僅附加總帳資料表,系統會自動產生稱為總帳檢視的檢視表。 總帳檢視會報告在資料表上發生的所有資料列插入。 總帳檢視主要的適用對象是可更新的總帳資料表而不是僅附加的總帳資料表,因為僅附加的總帳資料表並沒有任何 UPDATEDELETE 功能。 僅附加的總帳資料表所產生的總帳檢視適合用來保持可更新和僅附加總帳資料表之間的一致性。

總帳檢視結構描述

注意

當您使用 <ledger_view_option> 參數搭配 CREATE TABLE (Transact-SQL) 陳述式來建立資料表時,可以自訂總帳檢視資料行名稱。 如需詳細資訊,請參閱 CREATE TABLE (Transact-SQL) 中的總帳檢視選項及對應範例。

預設資料行名稱 資料類型 描述
ledger_transaction_id BIGINT 建立或刪除資料列版本的交易 ID。
ledger_sequence_number BIGINT 資料表中交易發生的資料列層級作業序號。
ledger_operation_type TINYINT 包含 1 (INSERT) 或 2 (DELETE)。 在總帳資料表中插入資料列,即會在總帳檢視中產生一列新的資料列且在這個資料行中含有 1。 從總帳資料表刪除資料列,即會在總帳檢視中產生一列新的資料列且在這個資料行中含有 2。 在總帳資料表中更新資料列時,會在總帳檢視中產生兩列新的資料列。 其中一列的這個資料行含有 2 (DELETE),另一列則含有 1 (INSERT)。 僅附加的總帳資料表不應發生 DELETE。
ledger_operation_type_desc nvarchar(128) 包含 INSERTDELETE。 如需詳細資訊,請參閱前一資料列。