Freigeben über


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

Gilt für: SQL Server 2022 (16.x) Azure SQL-Datenbank Azure 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. Diese Art von Ledgertabellen eignen sich ideal für Systeme, die Datensätze nicht aktualisieren oder löschen, etwa SIEM-Systeme (Security Information & Event Management) oder Blockchain-Systeme, bei denen Daten aus der Blockchain in einer 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 zum Anfügen vorgesehene Ledgertabelle erstellen, in dem Sie das Argument LEDGER = ON in Ihrer CREATE TABLE (Transact-SQL)-Anweisung und die Option APPEND_ONLY = ON 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.

Append-Only Ledger-Tabellenschema

Eine aktualisierbare Ledger-Tabelle muss über die folgenden GENERATED ALWAYS-Spalten verfügen. Diese enthalten Metadaten, die angeben, durch welche Transaktionen Änderungen an der Tabelle vorgenommen wurden, und in welcher Reihenfolge die Vorgänge ausgeführt wurden, mit denen Zeilen von der jeweiligen 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 diese automatisch unter Verwendung 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 meldet alle eingefügte Zeilen, die in der Tabelle aufgetreten 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 für Konsistenz zwischen aktualisierbaren und Append-Only Ledger-Tabelle verfügbar.

Schema der Ledgersicht

Hinweis

Die Spaltennamen der Ledgeransicht können beim Erstellen der Tabelle mithilfe des <ledger_view_option>-Parameters mit der Anweisung CREATE TABLE (Transact-SQL) angepasst werden. Weitere Informationen finden Sie unter den Optionen für die Ledgersicht und in den entsprechenden Beispielen zu CREATE TABLE (Transact-SQL).

Standardspaltenname Datentyp Beschreibung
ledger_transaction_id bigint Die Transaktions-ID, mit der eine Zeilenversion erstellt oder gelöscht wurde.
ledger_sequence_number bigint Die Sequenznummer eines Vorgangs auf Zeilenebene innerhalb der Transaktion für die 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. In dieser Spalte enthält eine Zeile 2 (DELETE) und die andere Zeile 1 (INSERT). Für eine nur zum Anfügen vorgesehene Ledgertabelle sollte kein DELETE-Vorgang ausgeführt werden.
ledger_operation_type_desc nvarchar(128) Enthält INSERT oder DELETE. Weitere Informationen finden Sie in der vorherigen Zeile.