Dela via


Verifiera en transaktionsregistertabell för att identifiera manipulering

gäller för: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

I den här artikeln kontrollerar du dataintegriteten i dina transaktionsregistertabeller. Om du har konfigurerat automatisk sammandragslagring i databasen följer du avsnittet T-SQL med automatisk sammandragslagring . Annars följer du T-SQL med hjälp av ett manuellt genererat sammanfattande avsnitt.

Förutsättningar

Köra transaktionsregisterverifiering för databasen

  1. Anslut till databasen med hjälp av SQL Server Management Studio eller Azure Data Studio.

  2. Skapa en ny fråga med följande T-SQL-instruktion:

    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
    

    Anmärkning

    Verifieringsskriptet finns också i Azure-portalen. Öppna Azure-portalen och leta reda på den databas som du vill verifiera. I Securityväljer du alternativet Ledger. I fönstret Transaktionsregister väljer du </> Verifiera databas.

  3. Utför sökfrågan. Du ser att digest_locations returnerar den aktuella platsen där databassammandrag lagras och eventuella tidigare platser. Resultatet returnerar lyckade eller misslyckade transaktionsregisterverifieringar.

    Skärmbild av att köra transaktionsregisterverifiering med hjälp av Azure Data Studio.

  4. Öppna digest_locations resultatuppsättningen för att visa platserna för dina sammandrag. I följande exempel visas två sammanfattade lagringsplatser för den här databasen:

    • Sökvägen anger platsen för digestfilerna.

    • last_digest_block_id anger block-ID för den senaste sammanfattningen som lagrats på sökvägens plats.

    • is_current anger om platsen i sökvägen är aktuell (sant) eller tidigare (falskt).

      [
       {
           "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
       }
      ]
      

    Viktigt!

    När du kör transaktionsregisterverifiering kontrollerar du platsen för digest_locations för att säkerställa att sammandrag som används i verifieringen hämtas från de platser du förväntar dig. Du vill se till att en privilegierad användare inte har ändrat platser för den sammanfattade lagringen till en oskyddad lagringsplats, till exempel Azure Storage, utan en konfigurerad och låst oföränderlighetsprincip.

  5. Verifiering returnerar följande meddelande i fönstret Resultat .

    • Om det inte fanns någon manipulering i databasen är meddelandet:

      Ledger verification successful
      
    • Om databasen manipulerades visas följande fel i fönstret Meddelanden :

      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.