Verifica dei database

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

Ledger fornisce una forma di integrità dei dati chiamata integrità progressiva, che offre evidenze di manomissione dei dati nelle tabelle del ledger. Il processo di verifica del database accetta come input uno o più digest del database generati in precedenza. Ricalcola quindi gli hash archiviati nel libro mastro del database in base allo stato corrente delle tabelle del libro mastro. Se gli hash calcolati non corrispondono ai digest di input, la verifica ha esito negativo. Questo vuol dire che i dati sono stati manomessi. Il processo di verifica segnala tutte le incoerenze rilevate.

Processo di verifica dei database

Il processo di verifica esegue la scansione di tutte le tabelle ledger e della cronologia. Ricalcola gli hash SHA-256 delle righe e li confronta con i file digest del database passati alla stored procedure di verifica.

Poiché la verifica del libro mastro ricalcola tutti gli hash per le transazioni nel database, può trattarsi di un processo a elevato utilizzo di risorse per i database con grandi quantità di dati. Per ridurre il costo della verifica, la funzionalità espone le opzioni per verificare le singole tabelle del libro mastro o solo un sottoinsieme delle tabelle del libro mastro.

È possibile eseguire la verifica del database mediante due stored procedure, a seconda che si utilizzi l'archiviazione automatica dei digest o che si gestiscano manualmente i digest.

Nota

L'opzione di database ALLOW_SNAPSHOT_ISOLATION deve essere abilitata nel database prima di poter eseguire le procedure memorizzate di verifica.

Verifica del database basata sull'archiviazione digest automatica

Quando si usa l'archiviazione automatica dei digest per generare e archiviare i digest del database, il percorso di archiviazione dei digest è indicato nella vista di catalogo di sistema sys.database_ledger_digest_locations come oggetti JSON. L'esecuzione della verifica del database consiste nell'esecuzione della stored procedure di sistema sp_verify_database_ledger_from_digest_storage . Specificare gli oggetti JSON dalla vista del catalogo di sistema sys.database_ledger_digest_locations in cui i digest del database sono configurati per l'archiviazione.

Quando si usa l'archiviazione digest automatica, è possibile modificare le posizioni di archiviazione durante tutto il ciclo di vita delle tabelle del libro mastro. Ad esempio, se si usa l'archiviazione non modificabile di Azure per archiviare i file digest, ma in un secondo momento si vuole usare Azure confidential ledger, è possibile farlo. Questa modifica nella posizione viene archiviata in sys.database_ledger_digest_locations.

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. È opportuno assicurarsi che un utente con privilegi non abbia modificato i percorsi di archiviazione dei digest verso un percorso di archiviazione non protetto, ad esempio Archiviazione di Azure, senza un criterio di immutabilità configurato e bloccato.

Per semplificare l'esecuzione della verifica quando si usano più posizioni di archiviazione digest, lo script seguente recupererà le posizioni dei digest ed eseguirà la verifica usando tali posizioni.

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

Verifica del database basata sull'archiviazione digest manuale

Quando si usa l'archiviazione manuale dei digest per la generazione e l'archiviazione dei digest di database, la procedura archiviata sp_verify_database_ledger viene usata per verificare il database ledger. Il contenuto JSON del digest viene aggiunto nella stored procedure. Quando si esegue la verifica del database, è possibile scegliere di verificare tutte le tabelle nel database o verificare tabelle specifiche.

Il codice seguente è un esempio di esecuzione della stored procedure sp_verify_database_ledger passando due digest per la verifica:

EXECUTE sp_verify_database_ledger N'
[
    {
        "database_name":  "ledgerdb",
        "block_id":  0,
        "hash":  "0xDC160697D823C51377F97020796486A59047EBDBF77C3E8F94EEE0FFF7B38A6A",
        "last_transaction_commit_time":  "2020-11-12T18:01:56.6200000",
        "digest_time":  "2020-11-12T18:39:27.7385724"
    },
    {
        "database_name":  "ledgerdb",
        "block_id":  1,
        "hash":  "0xE5BE97FDFFA4A16ADF7301C8B2BEBC4BAE5895CD76785D699B815ED2653D9EF8",
        "last_transaction_commit_time":  "2020-11-12T18:39:35.6633333",
        "digest_time":  "2020-11-12T18:43:30.4701575"
    }
]';

I codici restituiti per sp_verify_database_ledger e sp_verify_database_ledger_from_digest_storage sono 0 (esito positivo) o 1 (errore).

Elemento consigliato

Idealmente, si vuole ridurre al minimo o addirittura eliminare il divario tra il momento in cui si è verificato l'attacco e il momento in cui è stato rilevato. Microsoft consiglia di pianificare regolarmente la verifica del libro mastro per evitare un ripristino del database a giorni o mesi fa dopo che è stata rilevata la manomissione. L'intervallo di verifica deve essere deciso dal cliente, ma occorre tenere presente che la verifica del libro mastro può richiedere risorse. È consigliabile eseguire questa operazione durante una finestra di manutenzione o nelle ore non di punta.

È possibile pianificare la verifica di un database in database SQL di Azure tramite Elastic Jobs o Automazione di Azure. Per pianificare la verifica del database in Istanza gestita di SQL di Azure e SQL Server, è possibile usare SQL Server Agent.

Autorizzazioni

La verifica del database richiede l'autorizzazione VIEW LEDGER CONTENT . Per conoscere i dettagli sulle autorizzazioni relative alle tabelle del libro mastro, vedere Autorizzazioni.