Tablas de libro de contabilidad de solo anexión

Se aplica a: SQL Server 2022 (16.x) y versiones posteriores de Azure SQL DatabaseAzure SQL Managed Instance

Las tablas de registro de solo anexión solo permiten operaciones INSERT en sus tablas, lo que garantiza que los usuarios con privilegios, como los administradores de bases de datos, no puedan alterar los datos mediante operaciones tradicionales de lenguaje de manipulación de datos. Las tablas del libro de contabilidad de solo anexión son muy adecuadas para sistemas que no actualizan ni eliminan registros, como sistemas de administración y eventos de información de seguridad o sistemas de cadena de bloques en los que los datos deben replicarse desde la cadena de bloques a una base de datos. Puesto que no hay ninguna operación UPDATE o DELETE en una tabla de solo anexión, no hay necesidad de una tabla de historial correspondiente, ya que existen tablas actualizables del libro de contabilidad.

Diagrama que muestra la arquitectura de las tablas del libro de contabilidad.

Puede crear una tabla de libro de contabilidad de solo anexión especificando el argumento LEDGER = ON en la instrucción CREATE TABLE (Transact-SQL) y la opción APPEND_ONLY = ON.

Importante

Una vez que se ha creado una tabla como tabla de libro de contabilidad, no se puede revertir a una tabla sin esta funcionalidad. Como resultado, un atacante no puede quitar temporalmente las funcionalidades del libro de contabilidad, realizar cambios en la tabla y, a continuación, volver a habilitar la funcionalidad del libro de contabilidad.

Esquema de la tabla de libro de contabilidad de solo anexión

Una tabla de solo anexión debe tener las siguientes columnas GENERATED ALWAYS con metadatos que tengan en cuenta qué transacciones realizaron cambios en la tabla y el orden de las operaciones en el que la transacción actualizó las filas. Al crear una tabla del libro de contabilidad de solo anexión, se crearán columnas GENERATED ALWAYS en la tabla del libro de contabilidad. Estos datos son útiles con fines forenses a la hora de comprender cómo se insertaron los datos a lo largo del tiempo.

Si no especifica las definiciones de las GENERATED ALWAYS columnas de la CREATE TABLE instrucción , el sistema los agrega automáticamente mediante los siguientes nombres predeterminados.

Nombre de columna predeterminado Tipo de datos Descripción
libro_mayor_id_transacción_inicio bigint Id. de la transacción que creó una versión de fila
ledger_start_sequence_number bigint Número de secuencia de una operación dentro de una transacción que creó una versión de fila

Vista del libro de contabilidad

Por cada tabla de libro de contabilidad de solo anexión, el sistema genera automáticamente una vista, denominada vista de libro de contabilidad. La vista de historial muestra todas las inserciones de filas realizadas en la tabla. La vista de libro mayor resulta especialmente útil para las tablas de libro mayor actualizables, más que para las tablas de libro mayor de solo anexado, porque las tablas de libro mayor de solo anexado no tienen ninguna funcionalidad UPDATE ni DELETE. La vista de contabilidad para las tablas de contabilidad de solo anexión está disponible para garantizar la coherencia entre las tablas de contabilidad actualizables y las de solo anexión.

Esquema de la vista de libro de contabilidad

Nota:

Los nombres de las columnas de la vista del libro de contabilidad se pueden personalizar al crear la tabla mediante el uso del parámetro <ledger_view_option> con la instrucción CREATE TABLE (Transact-SQL). Para obtener más información, consulte las opciones de la vista del libro mayor y los ejemplos correspondientes en CREATE TABLE (Transact-SQL).

Nombre de columna predeterminado Tipo de datos Descripción
ledger_transaction_id bigint Identificador de la transacción que creó o eliminó una versión de fila.
número_de_secuencia_del_libro_mayor bigint El número de secuencia de una operación de nivel de fila dentro de la transacción realizada en la tabla.
tipo_de_operación_del_libro_mayor tinyint Contiene 1 (INSERT) o 2 (DELETE). La inserción de una fila en la tabla del libro de contabilidad genera una nueva fila en la vista de libro de contabilidad que contiene 1 en esta columna. Al eliminar una fila de la tabla del libro de contabilidad, se genera una nueva fila en la vista del libro de contabilidad que contiene 2 en esta columna. Al actualizar una fila de la tabla de libro de contabilidad, se generan dos nuevas filas en la vista de libro de contabilidad. Una fila contiene 2 (DELETE) y la otra contiene 1 (INSERT) en esta columna. DELETE No se debe producir una excepción en una tabla de libro de contabilidad de solo anexión.
ledger_operation_type_desc nvarchar(128) Contiene INSERT o DELETE. Para obtener más información, vea la fila anterior.