Crear una tabla ledger, leer su historial de cambios y verificar la integridad
SQL ServerSeguridadComando
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":"..."}';Qué hace
Crea una tabla ledger que registra los cambios de filas en una cadena de hashes criptográficos; la vista _Ledger muestra quién hizo cada INSERT/UPDATE/DELETE y cuándo, y la verificación contra un digest almacenado demuestra que los datos no se alteraron después (tampoco por los DBA).
Cuándo usarlo
Para datos cuya inmutabilidad debe poder demostrarse: registros financieros, pistas de auditoría, registros de contratos/aprobaciones.
Precaución
Ledger no se puede desactivar una vez creada la tabla; una tabla ledger no se puede convertir en tabla normal, y una tabla ledger eliminada se conserva como dropped ledger table. El ledger actualizable escribe una fila de historial en cada cambio y el almacenamiento crece. Salvo que los digests se guarden fuera de la base de datos en almacenamiento inmutable (WORM, Azure immutable blob), la verificación no tiene valor probatorio. sp_verify_database_ledger falla con el error 37498 sin snapshot isolation.
Relacionado
- Configurar TDE: master key, certificado, backup del certificado y progreso del cifrado
- Configurar SQL Server Audit: inicios de sesión, cambios de permisos y acceso a tablas
- Encontrar usuarios huérfanos y volver a asociarlos a logins (tras restore / AG)
- Auditoría de logins y permisos: miembros de sysadmin, permisos de riesgo, contraseñas débiles