Ledger-Tabelle anlegen, ihre Änderungshistorie lesen und die Integrität verifizieren
SQL ServerSicherheitBefehl
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":"..."}';Was es tut
Legt eine Ledger-Tabelle an, die Zeilenänderungen in einer kryptografischen Hash-Kette protokolliert; die _Ledger-View zeigt, wer jedes INSERT/UPDATE/DELETE wann ausgeführt hat, und die Verifizierung gegen einen gespeicherten Digest beweist, dass die Daten nachträglich nicht verändert wurden (auch nicht von DBAs).
Wann einsetzen
Für Daten, deren Unveränderlichkeit nachweisbar sein muss: Finanzbuchungen, Audit-Trails, Vertrags-/Genehmigungsdatensätze.
Vorsicht
Ledger lässt sich nach dem Anlegen der Tabelle nicht ausschalten; eine Ledger-Tabelle kann nicht in eine normale Tabelle umgewandelt werden, und eine gelöschte Ledger-Tabelle bleibt als gelöschte Ledger-Tabelle erhalten. Updatable Ledger schreibt bei jeder Änderung eine Historienzeile, der Speicherbedarf wächst. Werden Digests nicht außerhalb der Datenbank in unveränderlichem Speicher (WORM, Azure immutable blob) abgelegt, hat die Verifizierung keine Beweiskraft. sp_verify_database_ledger schlägt ohne Snapshot Isolation mit Fehler 37498 fehl.
Verwandte Einträge
- TDE einrichten: Master Key, Zertifikat, Zertifikatsbackup und Verschlüsselungsfortschritt
- SQL Server Audit einrichten: Logins, Berechtigungsänderungen und Tabellenzugriffe
- Verwaiste Benutzer finden und Logins neu zuordnen (nach Restore / AG)
- Audit von Logins und Berechtigungen: sysadmin-Mitglieder, riskante Berechtigungen, schwache Passwörter