總帳概觀

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

如何為儲存在資料庫系統中的資料建立資料完整性信任,是所有管理財務、醫療或其他敏感性資料的組織長期以來所面臨的問題。 總帳功能可在資料庫中提供竄改證據功能。 您可以使用密碼編譯方式向稽核員或其他商業當事人證明您的資料未遭竄改。

總帳有助於保護資料不為任何攻擊者,或包括資料庫系統管理員 (DBA)、系統管理員和雲端系統管理員在內的高權限使用者所變更。 此功能和傳統的總帳一樣,會保留歷程記錄資料。 資料庫只要更新資料列,就會將前一個值留存在記錄資料表中並予以保護。 總帳會提供資料庫一段時間內的所有變更紀事輯。

總帳和歷程記錄資料皆以公開透明的方式管理,提供不受任何應用程式變更的保護。 這項功能會以關聯式的形式維護歷程記錄資料,以支援稽核、取證和其他用途的 SQL 查詢。 這除了保證加密資料的完整性,同時保有 SQL Database 的強大功能、彈性和效能。

Diagram of the ledger table architecture.

總帳的使用案例

讓我們來看看使用總帳的一些優點。

簡化稽核

所有生產系統的價值都在於能夠信任系統所取用和產生的資料。 如有心懷惡意的使用者竄改了您資料庫中的資料,則其會為依賴該資料的商務程序帶來極其糟糕的結果。

維護對資料的信任需要啟用能降低可能攻擊的適當安全性控制項,結合備份和還原做法以及完整的災害復原程序。 外部單位負責稽核可確保這些做法已就位。

稽核程序是時間非常緊湊的活動。 稽核需要在現場檢查實作的做法,例如檢閱稽核記錄、檢查驗證,以及檢查存取控制等等。 雖然這些手動程序能揭露可能的安全性缺口,卻無法提供可證明資料未遭惡意更改的證據。

總帳能向稽核員提供資料完整性的加密證明。 這項證明有助於簡化稽核程序。 同時提供系統資料完整性的不可否認性。

多方商務程序

在某些系統中 (例如供應鏈管理系統),多個組織必須彼此共用某個商務程序的狀態。 這些系統要對抗資料共用和信任的挑戰。 許多組織都轉向 Ethereum 或 Hyperledger Fabric 等傳統區塊鏈,以數位轉換其多方商務程序。

區塊鏈非常適合解決網路各方參與者信任度低的多方網路問題。 這些網路有很多基本上都是極看重信任的集中式解決方案,但完全分散式的基礎結構卻是重量級的解決方案。

總帳為這些網路提供了解決方案。 參與者可以驗證集中存放資料的完整性,不會影響網路共識引入區塊鏈網路的複雜性和效能。

客戶成就

適用於區塊鏈的受信任鏈下儲存體

當區塊鏈網路對多方商務程序而言不可或缺時,能在區塊鏈上查詢資料卻不犧牲效能就是一項挑戰。

解決此問題的一般模式涉及將資料從區塊鏈複寫到鏈下存放區,例如資料庫。 但在將資料從區塊鏈複寫到資料庫之後,因資料完整性之故,區塊鏈供應項目一定會消失。 總帳讓區塊鏈網路的鏈下儲存體保有資料完整性,以利確保全系統的完整資料信任。

運作方式

總帳資料表中交易修改的任何資料列,都是使用 Merkle 樹狀結構來加密 SHA-256 雜湊,以建立代表交易中所有資料列的根雜湊。 經資料庫處理的交易也會透過 Merkle 樹狀資料結構一起用 SHA-256 雜湊演算。 結果是形成區塊的根雜湊。 然後,這個區塊經過區塊根雜湊的 SHA-256 雜湊演算,和上一個區塊的根雜湊一起輸入雜湊函式。 這樣的雜湊演算就形成一個區塊鏈。

資料庫總帳中的根雜湊也稱為資料庫摘要,包含密碼編譯雜湊交易,並顯示資料庫的狀態。 這些都是可以定期產生的,並儲存在資料庫外部的防竄改儲存體中,例如 Azure Blob 儲存體設定不變性原則Azure 機密總帳或內部部署單寫多讀 (WORM) 儲存體裝置。 稍後會比較摘要中雜湊值與資料庫中的計算雜湊,使用資料庫摘要驗證資料庫的完整性。

總帳功能以兩種形式引入資料表:

可更新的總帳資料表和僅限附加的總帳資料表都提供竄改證明功能和數位鑑識功能。

可更新的總帳資料表

可更新的總帳資料表很適合預期對資料庫資料表發出更新和刪除的應用程式模式,例如記錄系統 (SOR) 應用程式。 您不需要變更應用程式的現有資料模式,即可啟用總帳功能。

當發生執行更新或刪除的交易時,可更新的總帳資料表會追蹤資料庫中所有資料列的變更歷程記錄。 可更新的總帳資料表是由系統建立版本的資料表,包含具有鏡像結構描述的其他資料表參考。

另一個資料表稱為「記錄資料表」。 每次總帳資料表更新或刪除資料列時,系統就會使用此資料表自動儲存前一版本的資料列。 當建立可更新的總帳資料表時,就會自動建立記錄資料表。

可更新總帳資料表及其對應記錄資料表中的值,可讓您看到一段時間的資料庫值紀事輯。 系統產生的總帳檢視聯結可更新總帳資料表和記錄資料表,讓您可以輕鬆查詢資料庫的紀事輯。

如需可更新總帳資料表的詳細資訊,請參閱建立與使用可更新的總帳資料表

僅限附加的總帳資料表

僅限附加的總帳資料表非常適合僅限插入的應用程式模式,例如安全性資訊和事件管理 (SIEM) 應用程式。 僅限附加的總帳資料表會封鎖 API 層級的更新和刪除。 這種封鎖方式可針對系統管理員和 DBA 等特殊權限使用者,提供更高的竄改保護力度。

因為只能在系統中插入資料,所以僅限附加的總帳資料表無可擷取的記錄,也就沒有對應的記錄資料表。 和可更新的總帳資料表一樣,總帳檢視也可讓您深入了解插入僅限附加資料表的資料列交易,以及執行插入的使用者。

如需僅限附加總帳資料表的詳細資訊,請參閱建立與使用僅限附加的總帳資料表

總帳資料庫

針對需要在整個資料庫存留期間保護所有資料完整性的應用程式,總帳資料庫提供容易使用的解決方案。 總帳資料庫只能包含總帳資料表。 不支援建立非總帳資料表的一般資料表。 根據預設,每個資料表都會建立為具備預設設定的可更新總帳資料表,這讓建立這類資料表變得非常簡單。 您會在建立時將資料庫設定為總帳資料庫。 建立之後,總帳資料庫就無法轉換成一般資料庫。 如需詳細資訊,請參閱設定總帳資料庫

資料庫摘要

資料庫總帳中最新區塊的雜湊稱為資料庫摘要。 這代表產生區塊時,資料庫中所有總帳資料表的狀態。

區塊形成時,就會發佈相關聯的資料庫摘要,並儲存在資料庫以外的防竄改儲存體中。 因為資料庫摘要代表摘要產生時的資料庫狀態,所以保護摘要不受竄改極為重要。 有權存取修改摘要的攻擊者可以:

  1. 竄改資料庫的資料。
  2. 產生代表具有這些變更之資料庫的雜湊。
  3. 修改摘要,以代表區塊中的交易更新雜湊。

總帳能讓您在不可變的儲存體Azure 機密總帳中自動產生及儲存資料庫摘要,以防止竄改。 或者,使用者可以手動產生資料庫摘要,將其儲存在自己選擇的位置。 日後可使用資料庫摘要來驗證儲存在總帳資料表中的資料未遭竄改。

總帳驗證

總帳功能不允許修改總帳系統檢視、僅附加資料表和記錄資料表的內容。 但是,擁有機器控制權的攻擊者或系統管理員,可以略過所有系統檢查直接竄改資料。 例如,攻擊者或系統管理員可以編輯儲存體中的資料庫檔案。 總帳無法防止這類攻擊,但保證會在驗證總帳資料時,偵測到所有竄改。

總帳驗證程序會將一或多個先前產生的資料庫摘要視為輸入,並根據總帳資料表的目前狀態,重新計算儲存在資料庫總帳中的雜湊。 如果計算的雜湊與輸入摘要不符,驗證就會失敗,指出資料已遭竄改。 然後,總帳會報告偵測到的所有不一致。

另請參閱