Comprobación de una tabla de libro de contabilidad para detectar alteraciones
Se aplica a: SQL Server 2022 (16.x) Azure SQL Database Azure SQL Managed Instance
En este artículo, comprobará la integridad de los datos de sus tablas de libro de contabilidad. Si ha configurado la opción Almacenamiento de resumen automático en su base de datos, siga la sección T-SQL que usa el almacenamiento de resúmenes automático. Si no, siga la sección T-SQL que usa un resumen generado manualmente.
Requisitos previos
- Tener una suscripción de Azure activa, si usa Azure SQL Database o Azure SQL Managed Instance. En caso de no tener ninguna, cree una cuenta gratuita.
- Cree y use tablas de libro de contabilidad actualizables o cree y use tablas de libro de contabilidad de solo anexión.
- SQL Server Management Studio o Azure Data Studio.
- 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.
Ejecución de la comprobación del libro de contabilidad de la base de datos
- T-SQL que usa el almacenamiento de resúmenes automático
- T-SQL que usa un resumen generado manualmente
Conéctese a la base de datos mediante SQL Server Management Studio o Azure Data Studio.
Cree una consulta con la siguiente instrucción T-SQL:
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
Nota:
El script de comprobación también puede encontrarse en Azure Portal. Abra Azure Portal, y busque la base de datos que quiera comprobar. En Seguridad, seleccione la opción Libro de contabilidad. En el panel Libro de contabilidad, seleccione </> Verify database (Comprobar base de datos).
Ejecutar la consulta. Verá que digest_locations devuelve la ubicación actual en la que se almacenan los resúmenes de la base de datos y las ubicaciones anteriores. Resultado devuelve el éxito o el error de la comprobación del libro de contabilidad.
Abra el conjunto de resultados de digest_locations para ver las ubicaciones de los resúmenes. En el ejemplo siguiente se muestran dos ubicaciones de almacenamiento de resúmenes para esta base de datos:
path indica la ubicación de los resúmenes.
last_digest_block_id indica el identificador de bloque del último resumen almacenado en la ubicación path.
is_current indica si la ubicación de path es la actual (true) o la anterior (false).
[ { "path": "https:\/\/digest1.blob.core.windows.net\/sqldbledgerdigests\/janderstestportal2server\/jandersnewdb\/2021-05-20T04:39:47.6570000", "last_digest_block_id": 10016, "is_current": true }, { "path": "https:\/\/jandersneweracl.confidential-ledger.azure.com\/sqldbledgerdigests\/janderstestportal2server\/jandersnewdb\/2021-05-20T04:39:47.6570000", "last_digest_block_id": 1704, "is_current": false } ]
Importante
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.
La comprobación devuelve el mensaje siguiente en la ventana Resultados.
Si no se ha alterado la base de datos, el mensaje será el siguiente:
Ledger verification successful
Si se ha producido una alteración en la base de datos, aparecerá el siguiente error en la ventana Mensajes:
Failed to execute query. Error: The hash of block xxxx in the database ledger doesn't match the hash provided in the digest for this block.