DBAtlas · Veritabanı operasyon atlası

Ledger tablo oluştur, değişiklik geçmişini oku ve bütünlüğü doğrula

SQL ServerGüvenlik

Komut

USE [Musteri];
-- Ledger dogrulamasi snapshot isolation ister:
ALTER DATABASE [Musteri] SET ALLOW_SNAPSHOT_ISOLATION ON;

-- Updatable ledger tablo (gecmis tablo otomatik tutulur):
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 engellenir):
CREATE TABLE dbo.IslemLog (Id bigint IDENTITY, Mesaj nvarchar(400))
WITH (LEDGER = ON (APPEND_ONLY = ON));

-- Kim, ne zaman, ne degistirdi:
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;

-- Digest al (guvenli disaridaki bir yere sakla) ve dogrula:
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":"..."}';

Ne yapar?

Satır değişikliklerini kriptografik hash zinciriyle kaydeden ledger tablo oluşturur; _Ledger view üzerinden her INSERT/UPDATE/DELETE'in kim tarafından ve ne zaman yapıldığını gösterir, saklanan digest ile verinin sonradan (DBA dahil) değiştirilmediğini doğrular.

Ne zaman kullanılır?

Finansal kayıt, denetim izi, sözleşme/onay kayıtları gibi değişmezliği kanıtlanması gereken verilerde.

Dikkat

Ledger özelliği tablo oluşturulduktan sonra kapatılamaz; ledger tablo normal tabloya çevrilemez ve DROP edilen ledger tablo silinmez, dropped ledger olarak saklanır. Updatable ledger her değişiklikte geçmiş tablosuna satır yazar ve depolama büyür. Digest'ler veritabanı dışında, değiştirilemez bir yerde (WORM depolama, Azure immutable blob) saklanmazsa doğrulama kanıt değeri taşımaz. sp_verify_database_ledger snapshot isolation olmadan 37498 hatası verir.

DBAtlas'ta aç →

İlgili