Tablas de libro de contabilidad de solo anexión

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

Las tablas del libro de contabilidad de solo anexión solo permiten operaciones INSERT en las tablas, lo que garantiza que los usuarios con privilegios, como los administradores de bases de datos, no puedan modificar los datos mediante las operaciones tradicionales del 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.

Diagram that shows architecture of ledger tables.

Puede crear una tabla de libro de contabilidad de solo anexión si especifica 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 columnas GENERATED ALWAYS en la instrucción CREATE TABLE, el sistema las agregará automáticamente con los nombres predeterminados siguientes.

Nombre de columna predeterminado Tipo de datos Descripción
ledger_start_transaction_id 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 libro de contabilidad notifica todas las inserciones de filas que se han producido en la tabla. La vista de libro de contabilidad sirve principalmente para las tablas actualizables del libro de contabilidad más que para las tablas del libro de contabilidad de solo anexión, ya que estas últimas no tienen ninguna funcionalidad UPDATE ni DELETE. La vista de libro de contabilidad para tablas de libro de contabilidad de solo anexión está disponible para mantener la coherencia entre las tablas de libro de contabilidad actualizables y las de solo anexión.

Esquema de la vista de libro de contabilidad

Nota:

Los nombres de columna de la vista de libro de contabilidad se pueden personalizar al crear la tabla mediante el parámetro <ledger_view_option> con la instrucción CREATE TABLE (Transact-SQL). Para obtener más información, consulte Opciones de la vista de libro de contabilidad 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.
ledger_sequence_number bigint Número de secuencia de una operación de nivel de fila dentro de la transacción de la tabla.
ledger_operation_type 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 1 (INSERT) en esta columna. Una eliminación (DELETE) no debería producirse en una tabla del 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.