Comprobación de una tabla de libro de contabilidad para detectar alteraciones

Se aplica a: SQL Server 2022 (16.x) Azure SQL DatabaseAzure 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

Ejecución de la comprobación del libro de contabilidad de la base de datos

  1. Conéctese a la base de datos mediante SQL Server Management Studio o Azure Data Studio.

  2. 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).

  3. 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.

    Screenshot of running ledger verification by using Azure Data Studio.

  4. 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.

  5. 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.