Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2022 (16.x) e versioni successive
Database SQL di Microsoft Azure
Istanza 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
- Una sottoscrizione di Azure attiva se si utilizza Azure SQL Database o Azure SQL Managed Instance. 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.
- Abilitare l'opzione di database ALTER DATABASE SET options (Transact-SQL) nel database prima di poter eseguire le stored procedure di verifica.
Eseguire la verifica del libro mastro per il database
Connetti al database usando SQL Server Management Studio.
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 CATCHNota
È 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.
Eseguire la query. Si noterà che
digest_locationsrestituisce 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.Aprire il
digest_locationsset di risultati per visualizzare le posizioni dei digest. L'esempio seguente mostra due posizioni di archiviazione del riepilogo per questo database:pathindica la posizione dei digest.last_digest_block_idindica l'ID del blocco dell'ultimo digest memorizzato nella posizionepath.is_currentindica se la posizione inpathè 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_locationsper 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à.La verifica restituisce il messaggio seguente nella finestra Risultati.
Se non è presente alcuna manomissione nel database, il messaggio è:
Ledger verification successfulSe 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.