Libro de Contabilidad: Añadiendo blockchain a SQL Server

El libro de contabilidad o Ledger garantiza la integridad, la inmutabilidad y el orden cronológico de los datos de SQL Server utilizando blockchain.

Hoy vamos a hablar de una de las características más interesantes y novedosas de SQL Server y Azure SQL: el libro de contabilidad o Ledger. Es una forma de garantizar la integridad, la inmutabilidad y el orden cronológico de los datos almacenados en una base de datos relacional, utilizando conceptos similares a los de la tecnología blockchain.

¿Qué es el libro de contabilidad? 

El libro de contabilidad permite crear tablas especiales que registran las operaciones realizadas sobre los datos, incluyendo información sobre el usuario, la fecha y hora, el tipo de operación y un hash criptográfico que enlaza cada registro con el anterior, formando una cadena inalterable. Además, cada registro del libro de contabilidad tiene una firma digital que se genera con una clave asimétrica, lo que impide que se pueda modificar o eliminar sin dejar rastro. De esta forma, se puede auditar y verificar la historia completa de los datos, detectar cualquier intento de manipulación o fraude, y cumplir con las normativas de seguridad y privacidad más exigentes.

Es una característica disponible tanto en SQL Server como en Azure SQL, aunque con algunas diferencias. En SQL Server, requiere la edición Enterprise o Developer y la versión 2019 o superior. En Azure SQL, está disponible en todas las ediciones y versiones, pero solo para las bases de datos individuales, no para las bases de datos elásticas o los grupos de servidores administrados. Además, en Azure SQL se ofrece un servicio adicional llamado Azure SQL Ledger, que proporciona una capa adicional de seguridad y confianza al almacenar los hashes del libro de contabilidad en un servicio externo e independiente, basado en la tecnología blockchain.

¿Para qué sirve el libro de contabilidad? 

El libro de contabilidad es una solución ideal para escenarios en los que se requiere un alto nivel de confianza y transparencia en los datos, como por ejemplo:

– Contabilidad financiera: se puede llevar un registro fiable y verificable de todas las transacciones realizadas por una empresa o una entidad bancaria, evitando errores, duplicidades o fraudes.
– Gestión de inventarios: se puede controlar el movimiento y el estado de los productos o activos a lo largo de la cadena de suministro, desde su origen hasta su destino final, asegurando su trazabilidad y calidad.
– Certificación digital: se puede emitir y validar certificados digitales que acrediten la identidad, la propiedad o la autorización de una persona o una entidad, utilizando l
edger como fuente de verdad única e inmutable.
– Votación electrónica: se puede garantizar la integridad y el secreto del voto, así como el recuento y la publicación de los resultados, utilizando el ledger
como sistema de registro seguro y transparente.

¿Cómo se usa el libro de contabilidad? 

Lo primero que tenemos que hacer es habilitarlo para la tabla o la base de datos que queremos proteger. Esto se puede hacer mediante el asistente gráfico de SQL Server Management Studio o mediante instrucciones T-SQL. Por ejemplo, para habilitarlo para una tabla llamada Clientes, podemos usar el siguiente código:

Con esto, se crea una tabla de libro de contabilidad llamada Clientes_Ledger, que tendrá la misma estructura que la tabla Clientes, más dos columnas adicionales: SysStartTime y SysEndTime, que indican el inicio y el fin de la vigencia de cada registro. También se crea un índice clusterizado sobre estas dos columnas para optimizar las consultas. Una vez habilitado, cada vez que insertemos, actualicemos o eliminemos un registro en la tabla Clientes, se generará automáticamente un registro correspondiente en la tabla Clientes_Ledger, con la información y la firma digital de la operación. Para consultar el libro de contabilidad, podemos usar la cláusula FOR SYSTEM_TIME en las instrucciones SELECT. Por ejemplo, para ver el historial completo de la tabla Clientes, podemos usar el siguiente código:

Con esto, obtenemos todos los registros que han existido en la tabla Clientes desde que se habilitó el libro de contabilidad, incluyendo los actuales y los borrados. También podemos filtrar por un rango temporal específico, usando las opciones AS OF, FROM TO o BETWEEN AND. Por ejemplo, para ver los registros que existían en la tabla Clientes el 1 de enero de 2024 a las 10:00 a.m., podemos usar el siguiente código:

Libro de contabilidad a nivel base de datos

También se puede habilitar a nivel de base de datos, lo que implica que se creará una tabla de libro de contabilidad para cada tabla existente y futura en la base de datos. Una vez habilitado para una base de datos habilitado no se podrán crear en ella tablas con el libro de contabilidad deshabilitado en esa base de datos. Para activarlo, podemos usar el siguiente código:

Para deshabilitar el libro de contabilidad, tanto a nivel de tabla como de base de datos, podemos usar el mismo código pero cambiando ON por OFF. Sin embargo, hay que tener en cuenta que al deshabilitarlo se pierde todo el historial acumulado hasta ese momento, por lo que es recomendable hacer una copia de seguridad antes. 

También se puede utilizar la función sys.fn_ledger_chain_integrity para comprobar la integridad del libro de contabilidad, comparando los valores almacenados en la columna sys_lsn con los valores calculados a partir del contenido y el hash de los registros. Esta función devuelve un valor booleano que indica si está intacto o si ha sido alterado.

¿Qué ventajas tiene? 

El libro de contabilidad tiene varias ventajas frente a otros métodos tradicionales de auditoría o registro de cambios, como por ejemplo:

– Fácil de implementar y administrar, ya que no requiere crear triggers ni tablas auxiliares.
Más seguro y confiable, ya que usa criptografía y firmas digitales para garantizar la autenticidad e integridad de los datos.
– Es más eficiente y escalable, ya que usa técnicas de compresión y particionamiento para optimizar el almacenamiento y el rendimiento.
– Compatible y portable, ya que se basa en estándares abiertos y se puede usar tanto en SQL Server como en Azure SQL.

¿Qué inconvenientes tiene el libro de contabilidad?

El libro de contabilidad también tiene algunas limitaciones que hay que tener en cuenta, como por ejemplo:

– No se puede modificar o eliminar el historial del libro de contabilidad, salvo que se deshabilite la funcionalidad por completo.
– E
s incompatible con tablas que tengan FILESTREAM o columnas de tipo XML, CLR, HIERARCHYID o GEOGRAPHY.
– No se puede usar el libro de contabilidad con tablas que tengan índices espaciales, columnstore o full-text.
Es incompatible
con tablas que tengan restricciones de tipo CHECK, FOREIGN KEY o UNIQUE.
– No se puede usar el libro de contabilidad con tablas que tengan columnas calculadas o generadas.

Conclusión

El libro de contabilidad es una característica muy potente y útil que permite aprovechar las ventajas de la tecnología blockchain en el ámbito de las bases de datos relacionales, ofreciendo un nivel de integridad, inmutabilidad y transparencia de los datos sin precedentes. Espero que os haya gustado este artículo y que os animéis a probar el libro de contabilidad en vuestros proyectos. Si os han quedado dudas o queréis aportar algo podéis hacerlo en los comentarios, en Twitter o en mi mail.

Logo SoyDBA

Únete a la newsletter de SoyDBA

Regístrate gratis para no perderte ninguna novedad. Te avisaré de noticias y eventos importantes

¡No hacemos spam! Lee nuestra política de privacidad para obtener más información.

Publicado por Roberto Carrancio

Mi nombre es Roberto Carrancio y soy un DBA de SQL server con más de 10 años de experiencia en el sector. Soy el creador del blog soydba.es donde intento publicar varios artículos a la semana (de lunes a viernes que los fines de semana me gusta estar con mi gente y disfrutar de mi moto) Espero que disfrutes leyendo este blog tanto como yo disfruto escribiendo y que te sea de utilidad. Si tienes alguna sugerencia, pregunta o comentario, puedes dejarlo al final de cada entrada o enviarme un correo electrónico. Estaré encantado de leerte y responderte. ¡Gracias por tu visita! Mi principal interés es compartir mi conocimiento sobre bases de datos con todo el que quiera aprenderlo. Me parece un mundo tan apasionante como desconocido. Fuera de lo profesional me encanta la cocina, la moto y disfrutar de tomar una cervecita con amigos.

3 comentarios

[…] herramienta que debemos tener en cuenta es el libro de contabilidad (ledger) como una herramienta adicional para registrar todas las transacciones que se realizan en […]

[…] hablamos en este blog de la funcionalidad Ledger o Libro de Contabilidad de las bases de datos SQL aquí. Por eso, hoy he decidido dedicarle un vídeo para que podáis […]

[…] el versionado tenemos técnicas distintas como el libro de contabilidad, o incluso estructuras propias si el estándar se nos queda corto. Si lo que queremos es saber […]

Deja una respuesta