Introducción: la integridad de los datos y la auditoría a prueba de manipulaciones son esenciales en sectores como la banca, la salud y la administración pública. A partir de SQL Server 2022 Microsoft introdujo las tablas Ledger, una funcionalidad similar a blockchain que garantiza inmutabilidad y pruebas criptográficas de los datos. Con Ledger cada cambio queda criptográficamente enlazado y verificable, evitando modificaciones encubiertas en los registros.
Tipos de tablas Ledger: existen dos modos principales en SQL Server
Tablas Ledger actualizables Almacenan el estado actual y además generan una tabla de historial oculta que graba cada versión de fila. Soportan INSERT UPDATE y DELETE. Son ideales para sistemas donde los registros evolucionan pero se necesita una pista de auditoría infalsificable, por ejemplo cuentas bancarias.
Tablas Ledger de solo apéndice Permiten únicamente INSERT. Son perfectas para logs de transacciones o auditorías donde no debe existir modificación sobre el pasado.
Conceptos internos
Tablas de historial Son tablas del sistema ocultas cuyo nombre comienza por mssql_ledger_history_for_ seguido del nombre de la tabla y un identificador GUID que almacenan versiones de fila con identificadores de transacción.
Ledger de base de datos Lleva los digests criptográficos de todas las tablas ledger en el nivel de base de datos.
Digest Es un hash criptográfico que puede exportarse y verificarse posteriormente como prueba de ausencia de manipulación.
Ejemplo práctico bancario con scripts SQL. A continuación se muestra una guía paso a paso pensada para entornos SQL Server 2022 o superiores. Las sentencias SQL presentadas usan parámetros o valores no textuales para evitar literales en claro en este ejemplo; en un despliegue real sustituya los parámetros por valores seguros o use sp_executesql con parámetros.
Paso 1 crear base de datos CREATE DATABASE BankLedgerDemo ; GO USE BankLedgerDemo ; GO
Paso 2 crear tablas Ledger CREATE TABLE Accounts ( AccountId INT PRIMARY KEY , HolderName NVARCHAR(100) NULL , Balance DECIMAL(18,2) NOT NULL ) WITH ( LEDGER = ON ( APPEND_ONLY = OFF ) ); CREATE TABLE Transactions ( TransactionId INT PRIMARY KEY , FromAccountId INT NULL , ToAccountId INT NULL , Amount DECIMAL(18,2) NOT NULL , TransactionTypeCode INT NOT NULL , CreatedAt DATETIME2 DEFAULT SYSUTCDATETIME() ) WITH ( LEDGER = ON ( APPEND_ONLY = ON ) );
En este diseño TransactionTypeCode usa códigos enteros para representar Deposit Withdraw Transfer etc evitando literales de texto en los ejemplos. Puede mapear esos códigos en su capa de aplicación o en una tabla de referencia.
Paso 3 insertar cuentas de ejemplo INSERT INTO Accounts ( AccountId , HolderName , Balance ) VALUES ( 1 , NULL , 1000.00 ), ( 2 , NULL , 500.00 );
Paso 4 operaciones bancarias Para todas las operaciones use transacciones explícitas para garantizar atomicidad.
Deposito BEGIN TRAN ; UPDATE Accounts SET Balance = Balance + @Amount WHERE AccountId = @ToAccountId ; INSERT INTO Transactions ( TransactionId , ToAccountId , Amount , TransactionTypeCode ) VALUES ( @TxId , @ToAccountId , @Amount , 1 ); COMMIT ;
Retiro BEGIN TRAN ; UPDATE Accounts SET Balance = Balance - @Amount WHERE AccountId = @FromAccountId ; INSERT INTO Transactions ( TransactionId , FromAccountId , Amount , TransactionTypeCode ) VALUES ( @TxId , @FromAccountId , @Amount , 2 ); COMMIT ;
Transferencia BEGIN TRAN ; UPDATE Accounts SET Balance = Balance - @Amount WHERE AccountId = @FromAccountId ; UPDATE Accounts SET Balance = Balance + @Amount WHERE AccountId = @ToAccountId ; INSERT INTO Transactions ( TransactionId , FromAccountId , ToAccountId , Amount , TransactionTypeCode ) VALUES ( @TxId , @FromAccountId , @ToAccountId , @Amount , 3 ); COMMIT ;
Paso 5 ver datos actuales SELECT * FROM Accounts ; SELECT * FROM Transactions ;
Paso 6 explorar historial Ledger SQL Server crea tablas de historial ocultas cuyo nombre comienza por mssql_ledger_history_for_ seguido del nombre de la tabla y un identificador único. Puede localizar esa tabla en el explorador de objetos de SSMS o consultando la metadata del sistema y filtrando por ese prefijo. Una vez tenga el nombre real de la tabla de historial podrá consultar las versiones de una fila concreta por ejemplo SELECT AccountId , HolderName , Balance , ledger_start_transaction_id , ledger_end_transaction_id FROM [mssql_ledger_history_for_Accounts_] WHERE AccountId = 1 ORDER BY ledger_start_transaction_id ;
Paso 7 interpretar cambios Cada versión en la tabla de historial indica el estado de la fila en un rango de identificadores de transacción. Por ejemplo puede observar un registro con ledger_start_transaction_id 1 y ledger_end_transaction_id 2 que luego cambia con ledger_start_transaction_id 2 y ledger_end_transaction_id 3 y finalmente una versión con ledger_end_transaction_id NULL que representa el estado actual.
Paso 8 comparar valores actuales e históricos Para comparar puede unir la tabla de historial con la tabla actual usando AccountId u otro identificador único y revisar los ledger_start_transaction_id y ledger_end_transaction_id para entender la evolución del dato.
Paso 9 generar digest de la base de datos EXEC sp_generate_database_ledger_digest ; El digest criptográfico resultante puede exportarse a un almacenamiento externo o incluso registrarse en una cadena de bloques pública o privada para verificación independiente por parte de auditores o reguladores.
Beneficios clave de usar Ledger Tables
Prevención de manipulación con pruebas criptográficas. Capacidad para demostrar integridad de datos ante auditores y tribunales. Mayor confianza en sistemas financieros y aplicativos críticos donde la cadena de custodia de la información es primordial.
Servicios profesionales y cómo Q2BSTUDIO puede ayudarle: En Q2BSTUDIO somos especialistas en desarrollo de software a medida y aplicaciones a medida además de ofrecer servicios avanzados de inteligencia artificial y ciberseguridad. Si necesita integrar Ledger Tables en soluciones bancarias o implementar arquitecturas seguras en la nube podemos acompañarle desde la concepción hasta la implementación y auditoría. Conozca nuestras soluciones de desarrollo y apps a medida en Desarrollo de aplicaciones a medida y nuestras ofertas gestionadas en la nube en Servicios cloud AWS y Azure.
Además ofrecemos servicios complementarios orientados a mejorar la gobernanza y la inteligencia del dato como inteligencia de negocio y Power BI para reporting y cuadros de mando, servicios de ciberseguridad y pentesting para proteger infraestructuras críticas, soluciones de automatización de procesos, y proyectos de ia para empresas incluyendo agentes IA y asistentes inteligentes. Estas capacidades permiten no solo guardar pruebas de integridad con Ledger sino explotarlas en escenarios de control, cumplimiento y análisis avanzado.
Conclusión: Las tablas Ledger de SQL Server incorporan mecanismos tipo blockchain dentro de bases de datos relacionales tradicionales. Si trabaja con información sensible o regulada y utiliza SQL Server 2022 o superior, explorar Ledger Tables es una apuesta sólida para garantizar trazabilidad y confianza en sus datos. En Q2BSTUDIO podemos ayudarle a diseñar e integrar estas capacidades dentro de soluciones de software a medida, servicios cloud, inteligencia artificial y seguridad para su organización.