Tablas de libro de contabilidad de solo anexión
Se aplica a: SQL Server 2022 (16.x) Azure SQL Database Azure 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.
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. |