Condividi tramite


Verificare una tabella del libro mastro per rilevare una manomissione

Si applica a: SQL Server 2022 (16.x) e versioni successive Database SQL di Microsoft AzureIstanza Gestita SQL di Azure

In questo articolo viene verificata l'integrità dei dati nelle tabelle libro mastro. Se si configura l'archiviazione digest automatica nel database, seguire la sezione T-SQL con l'archiviazione digest automatica . In caso contrario, seguire la sezione T-SQL con un riepilogo generato manualmente.

Prerequisiti

Eseguire la verifica del libro mastro per il database

  1. Connetti al database usando SQL Server Management Studio.

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

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

    Nota

    È anche possibile trovare lo script di verifica 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. Si noterà che digest_locations restituisce il percorso corrente in cui vengono archiviati i digest del database e le posizioni precedenti. Risultato restituisce l'esito positivo o negativo della verifica del libro mastro.

    Screenshot della verifica del libro mastro in corso con Visual Studio Code.

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

    • path indica la posizione dei digest.

    • last_digest_block_id indica l'ID del blocco dell'ultimo digest memorizzato nella posizione 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 registro, controllare la posizione di digest_locations per assicurarsi che i digest usati nella verifica vengano recuperati dalle posizioni previste. Assicurarsi che un utente con privilegi non cambi le posizioni dell'archiviazione del digest in un percorso non protetto, come l'Archiviazione di Azure, senza avere configurato e bloccato una politica di immutabilità.

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

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

      Ledger verification successful
      
    • Se nel database è presente una manomissione, nella finestra Messaggi viene visualizzato 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.