Überprüfen einer Ledgertabelle zum Erkennen von Manipulationen
Gilt für: SQL Server 2022 (16.x) Azure SQL-Datenbank Azure SQL Managed Instance
In diesem Artikel überprüfen Sie die Integrität der Daten in Ihren Ledgertabellen. Wenn Sie die Einstellung Automatische Digestspeicherung aktivieren in Ihrer Datenbank ausgewählt haben, folgen Sie dem Abschnitt T-SQL mit automatischer Digestspeicherung. Andernfalls folgen Sie dem Abschnitt T-SQL mithilfe eines manuell generierten Digests.
Voraussetzungen
- Sie benötigen ein aktives Azure-Abonnement, wenn Sie Azure SQL-Datenbank oder Azure SQL Managed Instance verwenden. Falls Sie nicht über eine Subscription verfügen, können Sie ein kostenloses Konto erstellen.
- Erstellen und Verwenden von aktualisierbaren Ledgertabellen oder Erstellen und Verwenden von Ledgertabellen, die nur Anfügevorgänge unterstützen
- SQL Server Management Studio oder Azure Data Studio.
- Die Datenbankoption ALLOW_SNAPSHOT_ISOLATION muss für die Datenbank aktiviert werden, bevor Sie die gespeicherten Verifizierungsverfahren ausführen können.
Durchführen der Ledgerüberprüfung für die Datenbank
Stellen Sie über SQL Server Management Studio oder Azure Data Studio eine Verbindung mit Ihrer Datenbank her.
Erstellen Sie eine neue Abfrage mit der folgenden T-SQL-Anweisung:
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
Hinweis
Das Überprüfungsskript findet sich ebenfalls im Azure-Portal. Öffnen Sie das Azure-Portal, und suchen Sie die Datenbank, die Sie überprüfen möchten. Wählen Sie unter Sicherheit die Option Ledger aus. Wählen Sie im Bereich Ledger die Option </> Datenbank prüfen aus.
Ausführen der Abfrage Sie sehen, dass digest_locations den aktuellen Speicherort Ihrer Datenbankdigests und alle früheren Speicherorte zurückgibt. Das Ergebnis zeigt eine erfolgreiche oder fehlerhafte Ledgerüberprüfung an.
Öffnen Sie das Resultset digest_locations, um die Speicherorte Ihrer Digests anzuzeigen. Das folgende Beispiel zeigt zwei Digestspeicherorte für diese Datenbank:
path gibt den Speicherort der Digests an.
last_digest_block_id gibt die Block-ID des letzten Digests an, der am Speicherort path gespeichert wurde.
is_current gibt an, ob der Speicherort in path der aktuelle (TRUE) oder ein früherer (FALSE) Speicherort ist.
[ { "path": "https:\/\/digest1.blob.core.windows.net\/sqldbledgerdigests\/janderstestportal2server\/jandersnewdb\/2021-05-20T04:39:47.6570000", "last_digest_block_id": 10016, "is_current": true }, { "path": "https:\/\/jandersneweracl.confidential-ledger.azure.com\/sqldbledgerdigests\/janderstestportal2server\/jandersnewdb\/2021-05-20T04:39:47.6570000", "last_digest_block_id": 1704, "is_current": false } ]
Wichtig
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.
Bei der Überprüfung wird im Fenster Ergebnisse folgende Meldung zurückgegeben.
Wenn Ihre Datenbank nicht manipuliert wurde, lautet die Meldung:
Ledger verification successful
Wenn Ihre Datenbank manipuliert wurde, wird der folgende Fehler im Fenster Meldungen angezeigt:
Failed to execute query. Error: The hash of block xxxx in the database ledger doesn't match the hash provided in the digest for this block.