DBAtlas · データベース運用アトラス

台帳テーブルを作成し、変更履歴を読み取り、整合性を検証する

SQL Serverセキュリティ

コマンド

USE [Musteri];
-- Ledger verification requires snapshot isolation:
ALTER DATABASE [Musteri] SET ALLOW_SNAPSHOT_ISOLATION ON;

-- Updatable ledger table (history table maintained automatically):
CREATE TABLE dbo.Hesap (
    HesapId int           NOT NULL PRIMARY KEY,
    Bakiye  decimal(18,2) NOT NULL
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.Hesap_History), LEDGER = ON);

-- Append-only ledger (UPDATE/DELETE are blocked):
CREATE TABLE dbo.IslemLog (Id bigint IDENTITY, Mesaj nvarchar(400))
WITH (LEDGER = ON (APPEND_ONLY = ON));

-- Who changed what, and when:
SELECT t.commit_time, t.principal_name, l.HesapId, l.Bakiye, l.ledger_operation_type_desc
FROM   dbo.Hesap_Ledger l
  JOIN sys.database_ledger_transactions t ON t.transaction_id = l.ledger_transaction_id
ORDER BY t.commit_time DESC;

-- Take a digest (store it somewhere trusted outside) and verify:
EXEC sys.sp_generate_database_ledger_digest;
EXEC sys.sp_verify_database_ledger
     N'{"database_name":"Musteri","block_id":0,"hash":"0x...","last_transaction_commit_time":"...","digest_time":"..."}';

概要

行の変更を暗号学的ハッシュチェーンに記録する台帳テーブルを作成する。_Ledger ビューは各 INSERT/UPDATE/DELETE を誰がいつ行ったかを示し、保存済みのダイジェストに対する検証により、データが事後に (DBA によるものを含め) 改ざんされていないことを証明する。

使用する場面

不変性を証明する必要があるデータ: 財務記録、監査証跡、契約 / 承認記録に。

注意

台帳はテーブル作成後に無効にできない。台帳テーブルは通常のテーブルに変換できず、削除した台帳テーブルは削除済み台帳テーブルとして保持される。更新可能な台帳は変更のたびに履歴行を書き込むため、ストレージが増大する。ダイジェストをデータベースの外部の不変ストレージ (WORM、Azure の不変 BLOB) に保存しない限り、検証に証拠能力はない。sp_verify_database_ledger はスナップショット分離がないとエラー 37498 で失敗する。

DBAtlas で開く →

関連項目