Tabelle di registro a sola aggiunta

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

Le tabelle del libro mastro di solo accodamento consentono esclusivamente INSERT operazioni sulle tabelle, assicurandosi che gli utenti con privilegi, ad esempio gli amministratori di database, non possano modificare i dati tramite le tradizionali operazioni di Data Manipulation Language. Le tabelle di registro a sola aggiunta sono ideali per sistemi che non aggiornano né eliminano record, ad esempio i sistemi SIEM (Security Information and Event Management) o i sistemi blockchain in cui è necessario replicare i dati dalla blockchain a un database. Poiché in una tabella solo di accodamento non sono previste operazioni UPDATE o DELETE, non è necessaria una tabella di cronologia corrispondente, come avviene per le tabelle ledger aggiornabili.

Diagramma che mostra l'architettura delle tabelle del libro mastro.

È possibile creare una tabella ledger di sola aggiunta specificando l'argomento LEDGER = ON nell'istruzione CREATE TABLE (Transact-SQL) e specificando l'opzione APPEND_ONLY = ON.

Importante

Dopo aver creato una tabella come tabella ledger, non è possibile riconvertirla in una tabella senza funzionalità ledger. Di conseguenza, un utente malintenzionato non può rimuovere temporaneamente le funzionalità del libro mastro, apportare modifiche alla tabella e quindi riabilitare la funzionalità del libro mastro.

Scema di tabelle del libro mastro di solo accodamento

Una tabella append-only deve includere le seguenti colonne GENERATED ALWAYS, che contengono metadati che indicano quali transazioni hanno apportato modifiche alla tabella e l'ordine delle operazioni con cui la transazione ha aggiornato le righe. Quando si crea una tabella ledger di sola aggiunta, le colonne GENERATED ALWAYS verranno create nella tabella ledger. Questi dati sono utili per scopi forensi, per comprendere il modo in cui i dati sono stati inseriti nel tempo.

Se non si specificano le definizioni delle GENERATED ALWAYS colonne nell'istruzione CREATE TABLE , il sistema li aggiunge automaticamente usando i nomi predefiniti seguenti.

Nome predefinito della colonna Tipo di dati Descrizione
ledger_start_transaction_id bigint L'ID della transazione che ha creato una versione di riga
registro_numero_sequenza_iniziale bigint Il numero di sequenza di un'operazione all'interno di una transazione che ha generato una versione della riga

Visualizzazione del libro mastro

Per ogni tabella del libro mastro di sola aggiunta, il sistema genera automaticamente una vista, chiamata vista del libro mastro. La vista del registro mostra tutti gli inserimenti di righe avvenuti nella tabella. La visualizzazione del libro mastro è utile principalmente per le tabelle del libro mastro aggiornabili, anziché per le tabelle del libro mastro di sola aggiunta, perché le tabelle del libro mastro di sola aggiunta non supportano alcuna funzionalità di UPDATE o DELETE. La visualizzazione del registro per le tabelle ledger a sola aggiunta è disponibile per garantire la coerenza tra le tabelle ledger aggiornabili e quelle a sola aggiunta.

Schema della vista del registro

Nota

I nomi delle colonne della vista libro mastro possono essere personalizzati quando si crea la tabella usando il <ledger_view_option> parametro con l'istruzione CREATE TABLE (Transact-SQL). Per altre informazioni, vedere Opzioni di visualizzazione libro mastro e gli esempi corrispondenti in CREATE TABLE (Transact-SQL).

Nome predefinito della colonna Tipo di dati Descrizione
ledger_transaction_id bigint L'ID della transazione che ha creato o eliminato una versione di riga.
numero_sequenza_libro_mastro bigint Il numero di sequenza di un'operazione a livello di riga all'interno della transazione nella tabella.
ledger_operation_type tinyint Contiene 1 (INSERT) o 2 (DELETE). L'inserimento di una riga nella tabella del libro mastro genera una nuova riga nella vista del libro mastro contenente 1 in questa colonna. L'eliminazione di una riga dalla tabella del libro mastro genera una nuova riga nella vista del libro mastro contenente 2 in questa colonna. L'aggiornamento di una riga nella tabella di contabilità generale genera due righe nella vista di contabilità generale. Una riga contiene 2 (DELETE) e l'altra contiene 1 (INSERT) in questa colonna. Un DELETE non dovrebbe verificarsi in una tabella ledger di solo accodamento.
ledger_operation_type_desc nvarchar(128) Contiene INSERT o DELETE. Per ulteriori informazioni, consultare le righe precedenti.