Verificare una tabella del libro mastro per rilevare una manomissione

Si applica a: SQL Server 2022 (16.x) Database Azure SQLIstanza gestita di SQL di Azure

In questo articolo si verificherà l'integrità dei dati nelle tabelle del libro mastro. Se è stata configurata l'archiviazione automatica del riepilogo nel database, seguire la sezione T-SQL con l'archiviazione automatica del riepilogo. In caso contrario, seguire la sezione T-SQL con un riepilogo generato manualmente.

Prerequisiti

Eseguire la verifica del libro mastro per il database

  1. Connettersi al database con SQL Server Management Studio o Azure Data Studio.

  2. Creare una nuova query con l'istruzione T-SQL seguente:

    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

    Lo script di verifica è disponibile anche nel portale di Azure. Aprire il portale di Azure e individuare il database da verificare. In Sicurezza, selezionare l'opzione Libro mastro. Nel riquadro Libro mastro, selezionare </>Verifica database.

  3. Eseguire la query. In questo modo, digest_locations restituirà il percorso corrente in cui sono archiviati i riepiloghi del database e le posizioni precedenti. Risultato restituisce l'esito positivo o negativo della verifica del libro mastro.

    Screenshot of running ledger verification by using Azure Data Studio.

  4. Aprire il set di risultati digest_locations per visualizzare le posizioni dei riepiloghi. L'esempio seguente mostra due posizioni di archiviazione del riepilogo per questo database:

    • path indica la posizione dei riepiloghi.

    • last_digest_block_id indica l'ID blocco dell'ultimo riepilogo archiviato nella posizione di path.

    • is_current indica se la posizione in path è quella corrente (true) o precedente (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

    Quando si esegue la verifica del libro mastro, controllare la posizione di digest_locations per assicurarsi che i riepiloghi usati nella verifica vengano recuperati dalle posizioni previste. Si vuole assicurarsi che un utente con privilegi non abbia modificato le posizioni dell'archiviazione digest in un percorso di archiviazione non protetto, ad esempio Archiviazione di Azure, senza criteri di immutabilità configurati e bloccati.

  5. La verifica restituisce il messaggio seguente nella finestra Risultati.

    • Se non è stata eseguita alcuna manomissione nel database, il messaggio è:

      Ledger verification successful
      
    • In caso di manomissione nel database, nella finestra Messaggi appare l'errore seguente:

      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.