適用於: SQL Server 2022 (16.x) 及更新版本
Azure SQL Database
Azure SQL 受控執行個體
僅附加總帳資料表只允許在您的資料表上執行 INSERT 作業,這可確保授權使用者(例如資料庫管理員)無法透過傳統資料操作語言作業改變資料。 僅附加總帳資料表很適合不會更新或刪除記錄的系統,例如,需要將資料從區塊鏈複寫到資料庫的安全性資訊事件以及管理系統或區塊鏈系統。 因為僅附加資料表沒有任何 UPDATE 或 DELETE 作業,所以就不需要像可更新的總帳資料表一樣要有對應的歷程記錄。
你可以在 CREATE TABLE(Transact-SQL) 陳述式中指定 LEDGER = ON 引數,並指定 APPEND_ONLY = ON 選項,以建立只允許附加的帳本資料表。
重要
將資料表建立為總帳資料表之後,就無法將還原為沒有總帳功能的資料表。 因此,攻擊者無法暫時移除總帳功能、對資料表進行變更,然後再重新啟用總帳功能。
僅可附加的總帳資料表結構
僅可附加的資料表必須具有下列 GENERATED ALWAYS 資料行,這些資料行包含中繼資料,用來指出哪些交易異動了資料表,以及交易更新資料列時所依循的作業順序。 當您建立僅附加式總帳資料表時,系統會在您的總帳資料表中建立 GENERATED ALWAYS 資料行。 此資料適合用來鑑識,以了解資料在一段時間內的插入方式。
如果你在語句中沒有指定欄位的 GENERATED ALWAYS 定義,系統會 CREATE TABLE 自動用以下預設名稱來新增欄位。
| 預設資料行名稱 | 資料類型 | 描述 |
|---|---|---|
| ledger_start_transaction_id | Bigint | 建立資料列版本的交易 ID |
| 帳本_起始_序號 | Bigint | 在交易內建立資料列版本之作業的序號 |
總帳檢視
針對每個僅附加總帳資料表,系統會自動產生稱為總帳檢視的檢視表。 分類帳檢視會顯示資料表中所有已發生的資料列插入作業。 總帳檢視主要的適用對象是可更新的總帳資料表而不是僅附加的總帳資料表,因為僅附加的總帳資料表並沒有任何 UPDATE 或 DELETE 功能。 僅附加總帳資料表的總帳檢視可供使用,以維持可更新總帳資料表與僅附加總帳資料表兩者之間的一致性。
總帳檢視結構描述
注意
您可以在建立資料表時,搭配 CREATE TABLE (Transact-SQL) 陳述式使用 <ledger_view_option> 參數,自訂帳本檢視中的資料行名稱。 欲了解更多資訊,請參閱帳本檢視選項及(Transact-SQL)中的相應範例CREATE TABLE。
| 預設資料行名稱 | 資料類型 | 描述 |
|---|---|---|
| ledger_transaction_id | Bigint | 建立或刪除資料列版本的交易識別碼。 |
| 帳本_序號 | Bigint | 該資料表上的交易中資料列層級作業的順序編號。 |
| 帳本作業類型 | Tinyint | 包含 1 (INSERT) 或 2 (DELETE)。 在分類帳資料表中插入資料列時,會在分類帳檢視中產生新的資料列,而此資料行會包含 1。 從分類帳資料表刪除資料列時,會在分類帳檢視中產生新的資料列,而此資料行會包含 2。 在總帳資料表中更新資料列時,會在總帳檢視中產生兩列新的資料列。 在此欄中,一列包含 2(DELETE),另一列包含 1(INSERT)。 一個DELETE 不應該發生於只可附加的帳本資料表中。 |
| ledger_operation_type_desc | nvarchar(128) | 包含 INSERT 或 DELETE。 如需詳細資訊,請參閱前一資料列。 |