Verificare una tabella del libro mastro per rilevare una manomissione
Si applica a: SQL Server 2022 (16.x) Database Azure SQL Istanza 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
- Se si usa Database SQL di Azure o Istanza gestita di SQL di Azure, è disponibile una sottoscrizione di Azure attiva. Se non se ne ha una, creare un account gratuito.
- Creare e usare tabelle del libro mastro aggiornabili o creare e usare tabelle del libro mastro append-only.
- SQL Server Management Studio o Azure Data Studio.
- L'opzione del database ALLOW_SNAPSHOT_ISOLATION deve essere abilitata nel database prima di poter eseguire le stored procedure di verifica.
Eseguire la verifica del libro mastro per il database
Connettersi al database con SQL Server Management Studio o Azure Data Studio.
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.
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.
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.
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.