Ledgertabellen, die nur Anfügevorgänge unterstützen

Gilt für: SQL Server 2022 (16.x) und höhere Versionen von Azure SQL-DatenbankAzure SQL Managed Instance

Nur zum Anfügen vorgesehene Ledgertabellen lassen ausschließlich INSERT-Vorgänge in Ihren Tabellen zu. Dadurch wird gewährleistet, dass privilegierte Benutzer*innen wie etwa Datenbankadministrator*innen die Daten nicht durch herkömmliche DML-Vorgänge (Data Manipulation Language, Datenbearbeitungssprache) ändern können. Append-only-Ledgertabellen sind ideal für Systeme, die Datensätze nicht aktualisieren oder löschen, wie etwa SIEM-Systeme (Security-Information- und Event-Management-Systeme) oder Blockchain-Systeme, bei denen Daten von der Blockchain in eine Datenbank repliziert werden müssen. Da es keine UPDATE- oder DELETE-Vorgänge in einer nur zum Anfügen vorgesehenen Tabelle gibt, ist keine entsprechende Verlaufstabelle wie bei aktualisierbaren Ledgertabellen notwendig.

Diagramm: Architektur von Ledgertabellen

Sie können eine Nur-Anfüge-Sachtabelle erstellen, indem Sie das LEDGER = ON Argument in Ihrer CREATE TABLE (Transact-SQL) -Anweisung angeben und die APPEND_ONLY = ON Option angeben.

Wichtig

Sobald eine Tabelle als Ledgertabelle erstellt wurde, kann sie nicht in eine Tabelle umgewandelt werden, die nicht über Ledgerfunktionen verfügt. Infolgedessen können Angreifer Ledgerfunktionen nicht vorübergehend entfernen, Änderungen an der Tabelle vornehmen und dann die Ledgerfunktionalität erneut aktivieren.

Schema einer nur anhängbaren Ledger-Tabelle

Eine Append-Only-Tabelle muss die folgenden GENERATED ALWAYS-Spalten aufweisen, die Metadaten enthalten, welche festhalten, durch welche Transaktionen Änderungen an der Tabelle vorgenommen wurden und in welcher Reihenfolge die Zeilen durch die Transaktion aktualisiert wurden. Beim Erstellen einer nur zum Anfügen vorgesehenen Ledgertabelle werden in Ihrer Ledgertabelle Spalten vom Typ GENERATED ALWAYS erstellt. Diese Daten sind für forensische Zwecke nützlich, um zu verstehen, wie Daten im Lauf der Zeit eingefügt wurden.

Wenn Sie die Definitionen der GENERATED ALWAYS Spalten in der CREATE TABLE Anweisung nicht angeben, fügt das System sie automatisch mithilfe der folgenden Standardnamen hinzu.

Standardspaltenname Datentyp Beschreibung
ledger_start_transaction_id bigint Die ID der Transaktion, mit der eine Zeilenversion erstellt wurde
ledger_start_sequence_number bigint Die Sequenznummer eines Vorgangs innerhalb einer Transaktion, mit der eine Zeilenversion erstellt wurde

Ledgersicht

Für jede Append-Only Ledger-Tabelle generiert das System automatisch eine Ansicht, die als Ledger-Ansicht bezeichnet wird. Die Ledger-Ansicht zeigt alle Zeileneinfügungen an, die in die Tabelle erfolgt sind. Die Ledgeransicht ist in erster Linie hilfreich für aktualisierbare Ledgertabellen und nicht für Ledgertabellen, die nur zum Anfügen vorgesehen sind, da die nur zum Anfügen vorgesehenen Ledgertabellen nicht über UPDATE- oder DELETE-Funktionen verfügen. Die Ledger-Ansicht für Append-Only-Ledger-Tabellen ist verfügbar, um die Konsistenz zwischen sowohl aktualisierbaren als auch Append-Only-Ledger-Tabellen zu gewährleisten.

Schema der Ledger-Ansicht

Hinweis

Die Spaltennamen der Ledgeransicht können beim Erstellen der Tabelle angepasst werden, indem Sie den Parameter <ledger_view_option> in der Anweisung CREATE TABLE (Transact-SQL) verwenden. Weitere Informationen finden Sie unter "Ledger-Ansichtsoptionen " und den entsprechenden Beispielen in CREATE TABLE (Transact-SQL).

Standardspaltenname Datentyp Beschreibung
ledger_transaction_id bigint Die Transaktions-ID, mit der eine Zeilenversion erstellt oder gelöscht wurde.
hauptbuch_sequenznummer bigint Die Sequenznummer einer Operation auf Zeilenebene innerhalb der Transaktion in der Tabelle.
ledger_operation_type tinyint Enthält 1 (INSERT) oder 2 (DELETE). Das Einfügen einer Zeile in die Ledgertabelle erzeugt eine neue Zeile in der Ledgeransicht, bei der 1 in dieser Spalte enthalten ist. Das Löschen einer Zeile aus der Ledgertabelle erzeugt eine neue Zeile in der Ledgeransicht, bei der 2 in dieser Spalte enthalten ist. Das Aktualisieren einer Zeile in der Ledger-Tabelle erstellt zwei neue Zeilen in der Ledger-Ansicht. Eine Zeile enthält 2 (DELETE), und die andere Zeile enthält 1 (INSERT) in dieser Spalte. Eine DELETE sollte in einer Ledger-Tabelle, die nur Anfügevorgänge zulässt, nicht auftreten.
ledger_operation_type_desc nvarchar(128) Enthält INSERT oder DELETE. Weitere Informationen finden Sie in der vorherigen Zeile.