Comprobación de la base de datos

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

El libro de contabilidad proporciona un formulario de integridad de datos denominado integridad hacia delante, que proporciona pruebas de alteración de los datos de las tablas de su libro de contabilidad. El proceso de verificación de la base de datos toma como entrada uno o más resúmenes de base de datos generados previamente. Luego, vuelve a calcular los valores hash almacenados en el libro de contabilidad de la base de datos en función del estado actual de las tablas del libro de contabilidad. Si los hashes calculados no coinciden con los resúmenes de entrada, se produce un error en la verificación. El error indica que los datos se han alterado. El proceso de verificación notifica todas las incoherencias que detecta.

Proceso de comprobación de la base de datos

El proceso de verificación examina todas las tablas del libro de contabilidad e historial. Vuelve a compilar los hash SHA-256 de sus filas y los compara con los archivos de resumen de la base de datos pasados al procedimiento almacenado de verificación.

Puesto que la comprobación del libro de contabilidad vuelve a calcular todos los hashes de las transacciones de la base de datos, puede ser un proceso que consume muchos recursos para las bases de datos con gran cantidad de datos. Para reducir el costo de la verificación, esta característica expone las opciones para verificar las tablas del libro de contabilidad individuales o solo un subconjunto de las tablas del libro de contabilidad.

Para realizar la verificación de la base de datos, se utilizan dos procedimientos almacenados, en función de si usa el almacenamiento automático de resúmenes o administra manualmente los resúmenes.

Nota:

La opción de base de datos ALLOW_SNAPSHOT_ISOLATION debe habilitarse en la base de datos para poder ejecutar los procedimientos almacenados de verificación.

Verificación de la base de datos mediante almacenamiento de resumen automático

Cuando usa el almacenamiento de resumen automático para generar y almacenar resúmenes de bases de datos, la ubicación del almacenamiento de resumen se encuentra en la vista de catálogo del sistema sys.database_ledger_digest_locations como objetos JSON. La ejecución de la verificación de la base de datos consiste en ejecutar el procedimiento almacenado del sistema sp_verify_database_ledger_from_digest_storage. Especifique los objetos JSON de la vista del catálogo del sistema sys.database_ledger_digest_locations en la que se configuran los resúmenes de las bases de datos para su almacenamiento.

Cuando usa el almacenamiento de resumen automático, puede cambiar las ubicaciones de almacenamiento a lo largo del ciclo de vida de las tablas del libro de contabilidad. Por ejemplo, si empieza por usar el almacenamiento inmutable de Azure para almacenar sus archivos de resumen, pero más adelante quiere usar Azure Confidential Ledger en su lugar, puede hacerlo. Este cambio de ubicación se almacena en sys.database_ledger_digest_locations.

Al ejecutar la comprobación del libro de contabilidad, inspeccione la ubicación de digest_locations para asegurarse de que los resúmenes usados en la comprobación se recuperan de las ubicaciones que espera. Quiere asegurarse de que un usuario con privilegios no haya cambiado las ubicaciones del almacenamiento de resúmenes a una ubicación de almacenamiento sin protección, como Azure Storage, sin una directiva de inmutabilidad configurada y bloqueada.

Para simplificar la ejecución de la verificación cuando se usan varias ubicaciones de almacenamiento de resumen, el siguiente script capturará las ubicaciones de los resúmenes y ejecutará la verificación con esas ubicaciones.

DECLARE @digest_locations NVARCHAR(MAX) = (SELECT * FROM sys.database_ledger_digest_locations FOR JSON AUTO, INCLUDE_NULL_VALUES);
SELECT @digest_locations as digest_locations;
BEGIN TRY
    EXEC sys.sp_verify_database_ledger_from_digest_storage @digest_locations;
    SELECT 'Ledger verification succeeded.' AS Result;
END TRY
BEGIN CATCH
    THROW;
END CATCH

Verificación de la base de datos mediante almacenamiento de resumen manual

Cuando se usa el almacenamiento de resumen manual para generar y almacenar resúmenes de base de datos, se usa el procedimiento almacenado sp_verify_database_ledger para comprobar la base de datos del libro de contabilidad. El contenido JSON del resumen se anexa en el procedimiento almacenado. Al ejecutar la verificación de la base de datos, puede elegir verificar todas las tablas de la base de datos o tablas específicas.

El código siguiente es un ejemplo de ejecución del procedimiento almacenado sp_verify_database_ledger pasando dos resúmenes para la verificación:

EXECUTE sp_verify_database_ledger N'
[
    {
        "database_name":  "ledgerdb",
        "block_id":  0,
        "hash":  "0xDC160697D823C51377F97020796486A59047EBDBF77C3E8F94EEE0FFF7B38A6A",
        "last_transaction_commit_time":  "2020-11-12T18:01:56.6200000",
        "digest_time":  "2020-11-12T18:39:27.7385724"
    },
    {
        "database_name":  "ledgerdb",
        "block_id":  1,
        "hash":  "0xE5BE97FDFFA4A16ADF7301C8B2BEBC4BAE5895CD76785D699B815ED2653D9EF8",
        "last_transaction_commit_time":  "2020-11-12T18:39:35.6633333",
        "digest_time":  "2020-11-12T18:43:30.4701575"
    }
]';

Los códigos de devolución para sp_verify_database_ledger y sp_verify_database_ledger_from_digest_storage son 0 (correcto) o 1 (error).

Recomendación

Lo ideal es minimizar o incluso eliminar el retraso entre el momento en que se produjo el ataque y el momento en que se detectó. Microsoft recomienda programar la comprobación del libro de contabilidad regularmente para evitar una restauración de la base de datos de días o meses atrás después de detectar alteraciones. El cliente debe decidir el intervalo de comprobación; en este sentido, conviene recordar que la comprobación del libro de contabilidad puede consumir recursos. Se recomienda realizar esta operación durante una ventana de mantenimiento o fuera de las horas punta.

La comprobación de la base de datos se puede programar en Azure SQL Database con trabajos elásticos o con Azure Automation. Para programar la comprobación de la base de datos en Azure SQL Managed Instance y SQL Server, puede usar el Agente SQL Server.

Permisos

La comprobación de la base de datos requiere el permiso VIEW LEDGER CONTENT. Para obtener más información sobre los permisos relacionados con las tablas del libro de contabilidad, consulte Permisos.