Verifiera en transaktionsregistertabell för att identifiera manipulering
gäller för: SQL Server 2022 (16.x)
Azure SQL Database
Azure 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
- Ha en aktiv Azure-prenumeration om du använder Azure SQL Database eller Azure SQL Managed Instance. Om du inte har en skapar du ett kostnadsfritt konto.
- Skapa och använda uppdaterade transaktionsregistertabeller eller skapa och använda transaktionsregistertabeller med endast tillägg.
- SQL Server Management Studio eller Azure Data Studio.
- Databasalternativet ALLOW_SNAPSHOT_ISOLATION måste aktiveras på databasen innan du kan köra de verifierade lagrade procedurerna.
Köra transaktionsregisterverifiering för databasen
Anslut till databasen med hjälp av SQL Server Management Studio eller Azure Data Studio.
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.
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.
Ö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.
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.