Überprüfen einer Ledgertabelle zum Erkennen von Manipulationen

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

In diesem Artikel überprüfen Sie die Integrität der Daten in Ihren Ledgertabellen. Wenn Sie den automatischen Digestspeicher in Ihrer Datenbank konfiguriert haben, folgen Sie dem T-SQL-Abschnitt mithilfe des Abschnitts "Automatischer Digestspeicher". Andernfalls folgen Sie dem Abschnitt T-SQL mithilfe eines manuell generierten Digests.

Voraussetzungen

Durchführen der Ledgerüberprüfung für die Datenbank

  1. Stellen Sie über SQL Server Management Studio oder Azure Data Studio eine Verbindung mit Ihrer Datenbank her.

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

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

    Screenshot of running ledger verification by using Azure Data Studio.

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

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