Digest-hantering
gäller för: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
Databassammandrag
Hashen för det senaste blocket i databasregistret kallas databassammandrag. Den representerar tillståndet för alla transaktionsregistertabeller i databasen vid den tidpunkt då blocket genererades. Det är effektivt att generera en databassammandrag eftersom det bara handlar om att beräkna hashvärden för de block som nyligen lades till.
Databassammandrag kan genereras antingen automatiskt av systemet eller manuellt av användaren. Du kan använda dem senare för att verifiera databasens integritet.
Databassammandrag genereras i form av ett JSON-dokument som innehåller hashen för det senaste blocket, tillsammans med metadata för block-ID:t. Metadata inkluderar den tid då sammandraget genererades och tidsstämpeln för incheckningen för den senaste transaktionen i det här blocket.
Verifieringsprocessen och databasens integritet beror på indatasammandragens integritet. För detta ändamål måste databassammandrag som extraheras från databasen lagras i betrodd lagring som de högprivilegierade användarna eller angriparna i databasen inte kan manipulera.
Automatisk generering och lagring av databassammandrag
Not
Automatisk generering och lagring av databassammandrag i SQL Server stöder endast Azure Storage-konton.
Ledger integreras med den oföränderliga lagringsfunktionen i Azure Blob Storage och Azure Confidential Ledger . Den här integreringen tillhandahåller säkra lagringstjänster i Azure för att skydda databassammandrag från potentiell manipulering. Den här integreringen är ett enkelt och kostnadseffektivt sätt för användare att automatisera sammanfattad hantering utan att behöva oroa sig för deras tillgänglighet och geografiska replikering. Azure Confidential Ledger har en starkare integritetsgaranti för kunder som kanske bryr sig om privilegierade administratörers åtkomst till sammanfattningen. Den här tabellen jämför den oföränderliga lagringsfunktionen i Azure Blob Storage med Azure Confidential Ledger.
Du kan konfigurera automatisk generering och lagring av databassammandrag via Azure-portalen, PowerShell eller Azure CLI. Mer information finns i Aktivera automatisk sammandragslagring. När du konfigurerar automatisk generering och lagring genereras databassammandrag med ett fördefinierat intervall på 30 sekunder och laddas upp till den valda lagringstjänsten. Om inga transaktioner sker i systemet under 30-sekundersintervallet genereras och laddas inte en databassammandrag upp. Den här mekanismen säkerställer att databassammandrag endast genereras när data har uppdaterats i databasen. När slutpunkten är en Azure Blob Storage skapar den logiska servern för Azure SQL Database eller Azure SQL Managed Instance en ny container med namnet sqldbledgerdigests och använder ett namngivningsmönster som: ServerName/DatabaseName/CreationTime
. Skapandetiden krävs eftersom en databas med samma namn kan tas bort och återskapas, vilket möjliggör olika inkarnationer av databasen under samma namn. Mer information finns i Överväganden för sammanfattad hantering.
Obs
För SQL Server måste containern skapas manuellt av användaren.
Princip för oföränderlighet för Azure Storage-konto
Om du använder ett Azure Storage-konto för lagring av databassammandrag konfigurerar du en oföränderlighetsprincip på containern efter etableringen för att säkerställa att databassammandrag skyddas från manipulering. Kontrollera att principen för oföränderlighet tillåter skyddade tilläggsskrivningar till tilläggsblobar och att principen är låst.
Behörighet för Azure Storage-konto
Om du använder Azure SQL Database eller Azure SQL Managed Instancekontrollerar du att din logiska server eller hanterade instans (systemidentitet) har tillräcklig behörighet för rollbaserad åtkomstkontroll (RBAC) för att skriva sammandrag genom att lägga till den i rollen Storage Blob Data Contributor. Om du använder Active geo-replikering eller grupper för automatisk överföring vid fel kontrollerar du att de sekundära replikerna har samma RBAC-behörighet för Azure Storage-kontot.
Om du använder SQL Server-måste du skapa en signatur för delad åtkomst (SAS) på den sammanfattade containern så att SQL Server kan ansluta och autentisera mot Azure Storage-kontot.
- Skapa en container på Azure Storage-kontot med namnet sqldbledgerdigests.
- Skapa en princip för en container med behörigheterna Read, Add, Create, Writeoch List och generera en signaturnyckel för delad åtkomst.
- För containern sqldbledgerdigests som används för digestfillagring, skapa en SQL Server-autentisering vars namn matchar containersökvägen.
I följande exempel förutsätts att en Azure Storage-container, en princip och en SAS-nyckel har skapats. Detta krävs av SQL Server för att få åtkomst till de sammanfattade filerna i containern.
I följande kodfragment ersätter du <your SAS key>
med SAS-nyckeln. SAS-nyckeln ser ut som 'sr=c&si=<MYPOLICYNAME>&sig=<THESHAREDACCESSSIGNATURE>'
.
CREATE CREDENTIAL [https://ledgerstorage.blob.core.windows.net/sqldbledgerdigests]
WITH IDENTITY='SHARED ACCESS SIGNATURE',
SECRET = '<your SAS key>'
Azure Confidential Ledger-behörighet
Om du använder Azure SQL Database eller Azure SQL Managed Instanceska du kontrollera att din logiska server eller hanterade instans (system-identitet) har tillräcklig behörighet för att kunna skriva sammanfattningar genom att lägga till den i rollen Deltagare. Det gör du genom att följa stegen för Användarhantering i Azure Confidential Ledger.
Notera
Automatisk generering och lagring av databassammandrag i SQL Server stöder endast Azure Storage-konton.
Konfigurera NSG-regler för Azure SQL Managed Instance så att de fungerar med Azure Confidential Ledger
Om du använder Azure SQL Managed Instancekontrollerar du att du konfigurerar reglerna för det virtuella nätverket i azure SQL Managed Instance för att kommunicera med Azure Confidential Ledger. Mer information finns i Konfigurera NSG-regler för Azure SQL Managed Instance så att de fungerar med Azure Confidential Ledger.
Manuell generering och lagring av databassammandrag
Du kan också generera ett databassammandrag på begäran så att du manuellt kan lagra databassammandraget i vilken tjänst eller enhet som du anser vara en pålitlig lagringsplats. Du kan till exempel välja en WORM-enhet (skriv en gång, läs många gånger) för lokal installation som mål. Du genererar en databassammandrag manuellt genom att köra den sys.sp_generate_database_ledger_digest lagrade proceduren i antingen SQL Server Management Studio eller Azure Data Studio.
EXECUTE sp_generate_database_ledger_digest;
Den returnerade resultatuppsättningen är en enda rad med data. Den bör sparas på den betrodda lagringsplatsen som ett JSON-dokument enligt följande:
{
"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"
}
Behörigheter
För att generera databassammandrag krävs behörigheten GENERATE LEDGER DIGEST
. Mer information om behörigheter som rör transaktionsregistertabeller finns i Behörigheter.
Överväganden för hantering av sammanställningar
Databasåterställning
Att återställa databasen till en tidigare tidpunkt, även känt som tidsbaserad återställning, är en åtgärd som ofta används när ett fel inträffar och användarna snabbt måste åtgärda detta genom att återgå till ett tidigare databasläge. När du laddar upp de genererade sammandragen till Azure Storage eller Azure Confidential Ledger samlas skapa tid av databasen som dessa sammandrag mappar till. Varje gång databasen återställs taggas den med en ny skapatid och med den här tekniken kan vi lagra sammandragen genom olika inkarnationer av databasen. För SQL Server är skapa tid den aktuella UTC-tiden när uppladdningen av sammandrag är aktiverad för första gången. Transaktionsregistret bevarar informationen om när en återställningsåtgärd inträffade, vilket gör att verifieringsprocessen kan använda alla relevanta sammandrag i databasens olika inkarnationer. Dessutom kan användarna granska alla sammandrag för olika skapandetider för att identifiera när databasen återställdes och hur långt tillbaka den återställdes till. Eftersom dessa data skrivs i oföränderlig lagring skyddas även den här informationen.
Obs
Om du utför en intern återställning av en databassäkerhetskopia i Azure SQL Managed Instance måste du ändra den sammanfattade sökvägen manuellt med hjälp av Azure-portalen, PowerShell eller Azure CLI.
Aktiv geo-replikering och AlwaysOn-tillgänglighetsgrupper
Aktiva geo-replikerings- eller automatiska redundansgrupper kan konfigureras för Azure SQL Database eller Azure SQL Managed Instance. Replikering mellan geografiska regioner är asynkron av prestandaskäl och tillåter därför att den sekundära databasen ligger något efter jämfört med den primära. Vid en geografisk failover går all senaste data som ännu inte har replikerats förlorad. Transaktionsregistret utfärdar endast databassammandrag för data som har replikerats till geografiska sekundärfiler för att garantera att sammandrag aldrig refererar till data som kan gå förlorade vid en geografisk redundansväxling. Detta gäller endast för automatisk generering och lagring av databassammandrag. I en redundansgrupp har både den primära och den sekundära databasen samma sammanfattade sökväg. Även när du utför en redundansväxling ändras inte digestvägen för vare sig primär- eller sekundärdatabasen.
Om redundansgruppen tas bort eller om du släpper länken fungerar båda databaserna som primära databaser. Då ändras den sammanfattade sökvägen för den tidigare sekundära databasen och vi lägger till mappen RemovedSecondaryReplica i sökvägen.
När databasen ingår i en AlwaysOn-tillgänglighetsgrupp eller en länk för hanterad instans i SQL Server används samma princip som aktiv geo-replikering. Uppladdningen av sammanfattningarna görs bara om alla transaktioner har replikerats till de sekundära replikerna.