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
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.
È 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. |