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