Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: SQL Server 2022 (16.x) y versiones posteriores
de Azure SQL Database
Azure 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.
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. |