Databaseverificatie
van toepassing op: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
Grootboek biedt een vorm van gegevensintegriteit genaamd voorwaartse integriteit, die bewijs levert van manipulatie van gegevens in uw grootboektabellen. Het verificatieproces van de database neemt een of meer eerder gegenereerde databasesamenvattingen als invoer. Vervolgens worden de hashes die zijn opgeslagen in het databaseboek opnieuw gecomputeerd op basis van de huidige status van de grootboektabellen. Als de berekende hashes niet overeenkomen met de invoersamenvatten, mislukt de verificatie. De fout geeft aan dat er met de gegevens is geknoeid. Het verificatieproces rapporteert alle inconsistenties die worden gedetecteerd.
Proces voor databaseverificatie
Het verificatieproces scant alle grootboek- en geschiedenistabellen. De SHA-256-hashes van hun rijen worden opnieuw berekend en vergeleken met de databasesamenvattingsbestanden die zijn overgedragen aan de verificatiestoredprocedure.
Omdat de grootboekverificatie alle hashes voor transacties in de database opnieuwcomputeert, kan het een resource-intensief proces zijn voor databases met grote hoeveelheden gegevens. Om de verificatiekosten te verlagen, worden met de functie opties weergegeven om afzonderlijke grootboektabellen of slechts een subset van de grootboektabellen te verifiëren.
U kunt databaseverificatie uitvoeren via twee opgeslagen procedures, afhankelijk van of u automatische digest-opslag
Notitie
De databaseoptie ALLOW_SNAPSHOT_ISOLATION moet op de database ingeschakeld zijn voordat u de opgeslagen verificatieprocedures kunt uitvoeren.
Databaseverificatie die gebruikmaakt van automatische digest-opslag
Wanneer u automatische digest-opslag gebruikt voor het genereren en opslaan van databasesamenvatkingen, bevindt de locatie van de digest-opslag zich in de systeemcatalogusweergave sys.database_ledger_digest_locations als JSON-objecten. Het uitvoeren van databaseverificatie houdt in dat de systeemopgeslagen procedure sp_verify_database_ledger_from_digest_storage wordt uitgevoerd. Geef de JSON-objecten op uit de sys.database_ledger_digest_locations systeemcatalogusweergave waarin databasesamenvatten zijn geconfigureerd om te worden opgeslagen.
Wanneer u automatische digest-opslag gebruikt, kunt u gedurende de gehele levenscyclus van de grootboektabellen opslaglocaties wijzigen. Als u bijvoorbeeld begint met het gebruik van onveranderbare Azure-opslag om uw digest-bestanden op te slaan, maar later wilt u Azure Confidential Ledger gebruiken, kunt u dit doen. Deze wijziging op locatie wordt opgeslagen in sys.database_ledger_digest_locations.
Wanneer u grootboekverificatie uitvoert, controleert u de locatie van digest_locations om ervoor te zorgen dat samenvattingen die worden gebruikt bij verificatie worden opgehaald van de locaties die u verwacht. U wilt ervoor zorgen dat een bevoegde gebruiker de locaties van de digest-opslag niet heeft gewijzigd in een niet-beveiligde opslaglocatie, zoals Azure Storage, zonder geconfigureerd en vergrendeld onveranderbaarheidsbeleid.
Om het uitvoeren van verificatie te vereenvoudigen wanneer u meerdere opslaglocaties voor digests gebruikt, haalt het volgende script de locaties van de digests op en voert u verificatie uit met behulp van deze locaties.
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
Databaseverificatie die gebruikmaakt van handmatige digest-opslag
Wanneer u handmatige digest-opslag gebruikt voor het genereren en opslaan van databasesamenvatten, wordt de opgeslagen procedure sp_verify_database_ledger gebruikt om de grootboekdatabase te verifiëren. De JSON-inhoud van de samenvatting wordt toegevoegd in de opgeslagen procedure. Wanneer u databaseverificatie uitvoert, kunt u ervoor kiezen om alle tabellen in de database te verifiëren of specifieke tabellen te verifiëren.
De volgende code is een voorbeeld van het uitvoeren van de sp_verify_database_ledger opgeslagen procedure door twee samenvattingen door te geven voor verificatie:
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"
}
]';
Retourcodes voor sp_verify_database_ledger
en sp_verify_database_ledger_from_digest_storage
zijn 0
(geslaagd) of 1
(fout).
Aanbeveling
In het ideale scenario wilt u de kloof tussen de tijd waarop de aanval heeft plaatsgevonden en de tijd waarop de aanval is gedetecteerd minimaliseren of zelfs elimineren. Microsoft raadt aan om de grootboekverificatie] regelmatig te plannen om te voorkomen dat de database wordt hersteld van dagen of maanden geleden nadat manipulatie is gedetecteerd. Het interval van de verificatie moet worden bepaald door de klant, maar houd er rekening mee dat verificatie van het grootboek veel middelen kan vergen. U wordt aangeraden dit uit te voeren tijdens een onderhoudsvenster of buiten piekuren.
Het plannen van databaseverificatie in Azure SQL Database kan worden uitgevoerd met Elastic Jobs of Azure Automation. Voor het plannen van de databaseverificatie in Azure SQL Managed Instance en SQL Server kunt u SQL Server Agent gebruiken.
Machtigingen
Voor databaseverificatie is de machtiging VIEW LEDGER CONTENT
vereist. Zie Machtigingenvoor meer informatie over machtigingen met betrekking tot grootboektabellen.