Teilen über


Datenbanküberprüfung

Gilt für: SQL Server 2022 (16.x) Azure SQL-Datenbank Azure SQL Managed Instance

Der Ledger ermöglicht eine Form der Datenintegrität, die als Forward Integrity („Vorwärtsintegrität“) bezeichnet wird und einen Beweis für die Manipulation von Daten in Ihren Ledgertabellen liefern kann. Für den Prozess der Datenbanküberprüfung werden als Eingabe ein oder mehrere zuvor generierte Datenbank-Digests verwendet. Anschließend werden die Hashes, die im Datenbankledger gespeichert sind, anhand des aktuellen Status der Ledgertabellen neu berechnet. Falls die berechneten Hashes nicht mit den Eingabe-Digests übereinstimmen, wird bei der Überprüfung ein Fehler angezeigt. Der Fehler ist ein Hinweis darauf, dass die Daten manipuliert wurden. Beim Überprüfungsprozess werden alle erkannten Inkonsistenzen gemeldet.

Datenbanküberprüfungsprozess

Beim Überprüfungsprozess werden alle Ledger- und Verlaufstabellen überprüft. Die SHA-256-Hashes der darin enthaltenen Zeilen werden neu berechnet und mit den Datenbank-Digest-Dateien verglichen, die an die gespeicherte Prozedur für die Überprüfung übergeben wurden.

Da die Ledgerüberprüfung alle Hashes für Transaktionen in der Datenbank neu berechnet, kann dies bei Datenbanken mit großen Datenmengen ein ressourcenintensiver Prozess sein. Zur Senkung der Überprüfungskosten macht das Feature Optionen verfügbar, um einzelne Ledger-Tabellen oder nur eine Teilmenge der Ledgertabellen zu überprüfen.

Für die Datenbanküberprüfung können Sie zwei gespeicherte Prozeduren nutzen. Die Vorgehensweise hängt hierbei davon ab, ob Sie automatischen Digest-Speicher verwenden oder Digests manuell verwalten.

Hinweis

Die Datenbankoption ALLOW_SNAPSHOT_ISOLATION muss für die Datenbank aktiviert werden, bevor Sie die gespeicherten Prozeduren ausführen können.

Datenbanküberprüfung mit automatischem Digest-Speicher

Wenn Sie den automatischen Digest-Speicher zum Generieren und Speichern von Datenbank-Digests verwenden, befindet sich der Speicherort des Digest-Speichers in der Systemkatalogsicht sys.database_ledger_digest_locations (in Form von JSON-Objekten). Die Datenbanküberprüfung umfasst die Ausführung der gespeicherten Systemprozedur sp_verify_database_ledger_from_digest_storage. Geben Sie die JSON-Objekte aus der Systemkatalogsicht sys.database_ledger_digest_locations an, die für die Speicherung der Datenbank-Digests konfiguriert wurde.

Bei Verwendung des automatischen Digest-Speichers können Sie die Speicherorte während des gesamten Lebenszyklus der Ledgertabellen ändern. Wenn Sie beispielsweise zunächst unveränderlichen Azure-Speicher nutzen, um Ihre Digest-Dateien zu speichern, und dann auf Azure Confidential Ledger umstellen möchten, können Sie dies tun. Diese Änderung des Speicherorts wird in sys.database_ledger_digest_locationsgespeichert.

Wenn Sie die Ledgerüberprüfung ausführen, überprüfen Sie den Speicherort der digest_locations, um sicherzustellen, dass die bei der Überprüfung verwendeten Digests von den erwarteten Speicherorten abgerufen werden. Sie sollten immer sicherstellen, dass keine privilegierten Benutzer*innen die Speicherorte des Digestspeichers an einem ungeschützten Speicherort wie Azure Storage ohne eine konfigurierte und gesperrte Unveränderlichkeitsrichtlinie geändert hat.

Um die Ausführung der Überprüfung bei Verwendung mehrerer Digest-Speicherorte zu vereinfachen, werden mit dem folgenden Skript die Speicherorte der Digests abgerufen, und anschließend wird die Überprüfung anhand dieser Speicherorte ausgeführt.

DECLARE @digest_locations NVARCHAR(MAX) = (SELECT * FROM sys.database_ledger_digest_locations FOR JSON AUTO, INCLUDE_NULL_VALUES);
SELECT @digest_locations as digest_locations;
BEGIN TRY
    EXEC sys.sp_verify_database_ledger_from_digest_storage @digest_locations;
    SELECT 'Ledger verification succeeded.' AS Result;
END TRY
BEGIN CATCH
    THROW;
END CATCH

Datenbanküberprüfung mit manuellem Digest-Speicher

Wenn Sie manuellen Digest-Speicher zum Generieren und Speichern von Datenbank-Digests verwenden, wird die gespeicherte Prozedur sp_verify_database_ledger verwendet, um die Ledgerdatenbank zu überprüfen. Der JSON-Inhalt des Digests wird an die gespeicherte Prozedur angefügt. Beim Ausführen der Datenbanküberprüfung können Sie auswählen, ob alle oder nur bestimmte Tabellen der Datenbank überprüft werden sollen.

Der folgende Code ist ein Beispiel für die Ausführung der gespeicherten Prozedur sp_verify_database_ledger mit einer Übergabe von zwei Digests zur Überprüfung:

EXECUTE sp_verify_database_ledger N'
[
    {
        "database_name":  "ledgerdb",
        "block_id":  0,
        "hash":  "0xDC160697D823C51377F97020796486A59047EBDBF77C3E8F94EEE0FFF7B38A6A",
        "last_transaction_commit_time":  "2020-11-12T18:01:56.6200000",
        "digest_time":  "2020-11-12T18:39:27.7385724"
    },
    {
        "database_name":  "ledgerdb",
        "block_id":  1,
        "hash":  "0xE5BE97FDFFA4A16ADF7301C8B2BEBC4BAE5895CD76785D699B815ED2653D9EF8",
        "last_transaction_commit_time":  "2020-11-12T18:39:35.6633333",
        "digest_time":  "2020-11-12T18:43:30.4701575"
    }
]';

Die Rückgabecodes für sp_verify_database_ledger und sp_verify_database_ledger_from_digest_storage lauten 0 (Erfolg) und 1 (Fehler).

Empfehlung

Im Idealfall möchten Sie die Zeitspanne zwischen dem Zeitpunkt des Angriffs und dem seiner Feststellung möglichst gering halten oder sogar eliminieren. Microsoft empfiehlt, die Ledgerüberprüfung regelmäßig durchzuführen, um eine Wiederherstellung der Datenbank vor Tagen oder Monaten nach der Erkennung von Manipulationen zu vermeiden. Das Intervall der Überprüfung sollte vom Kunden festgelegt werden. Dabei sollte jedoch beachtet werden, dass die Ledgerüberprüfung ressourcenintensiv sein kann. Es wird empfohlen, dies während eines Wartungsfensters oder außerhalb von Spitzenzeiten auszuführen.

Die Planung der Azure SQL Datenbanküberprüfung kann mit Elastic Jobs oder Azure Automation erfolgen. Zum Planen der Datenbanküberprüfungen in SQL Server und Azure SQL Managed Instance können Sie den SQL Server-Agent nutzen.

Berechtigungen

Für die Datenbanküberprüfung ist die VIEW LEDGER CONTENT Berechtigung erforderlich. Weitere Informationen zu Berechtigungen im Zusammenhang mit Ledgertabellen finden Sie unter Berechtigungen.