Ověření databáze
platí pro: SQL Server 2022 (16.x) azure SQL Databaseazure SQL Managed Instance
Ledger poskytuje formu integrity dat nazývanou dopředná integrita, která poskytuje důkazy o manipulaci s daty v tabulkách vašeho registru. Proces ověření databáze přebírá jako vstup jeden nebo více dříve generovaných hashových souhrnů databáze. Následně znovu zkompiuje hodnoty hash uložené v registru databáze na základě aktuálního stavu tabulek registru. Pokud vypočítané hodnoty hash neodpovídají vstupním hodnotám hash, ověření se nezdaří. Selhání značí, že data byla manipulována. Proces ověření hlásí všechny nekonzistence, které detekuje.
Proces ověření databáze
Proces ověření prohledá všechny tabulky registru a historie. Znovu vypočítá SHA-256 hodnoty hash jejich řádků a porovná je se soubory souhrnů databáze předanými k ověřovací uložené proceduře.
Vzhledem k tomu, že ověření registru rekomputuje všechny hodnoty hash pro transakce v databázi, může to být proces náročný na prostředky pro databáze s velkým množstvím dat. Aby se snížily náklady na ověření, funkce zveřejňuje možnosti pro ověření jednotlivých tabulek registru nebo pouze podmnožinu tabulek registru.
Ověření databáze provedete dvěma uloženými procedurami v závislosti na tom, jestli použít automatické úložiště digest nebo ručně spravovat přehledy.
Poznámka
Možnost ALLOW_SNAPSHOT_ISOLATION musí být povolena na databázi, než budete moci spustit uložené procedury ověření.
Ověření databáze, které používá automatizované úložiště kontrolních součtů.
Pokud pro generování a ukládání souhrnů databáze používáte automatické ukládání, umístění úložiště souhrnů je uloženo v zobrazení systémového katalogu sys.database_ledger_digest_locations jako objekty JSON. Provádění ověření databáze zahrnuje spuštění systémové uložené procedury sp_verify_database_ledger_from_digest_storage. Určete objekty JSON ze zobrazení systémového katalogu sys.database_ledger_digest_locations, kde jsou souhrny databáze nakonfigurovány k uložení.
Při použití automatického ukládání souhrnů můžete měnit umístění úložiště během životního cyklu tabulek účetní knihy. Pokud například začnete používat neměnné úložiště Azure k ukládání souborů digest, ale později budete chtít místo toho použít důvěrný registr Azure, můžete to udělat. Tato změna v umístění je uložena v sys.database_ledger_digest_locations.
Při spuštění ověření účetní knihy zkontrolujte umístění digest_locations a ujistěte se, že se souhrny použité při ověřování načítají z očekávaných umístění. Chcete zajistit, aby privilegovaný uživatel nezměnil umístění úložiště digest na nechráněné umístění úložiště, jako je Azure Storage, bez nakonfigurovaných a uzamčených zásad neměnnosti.
Aby se zjednodušilo ověřování při použití více úložných míst pro digesty, následující skript nejprve získá umístění těchto digestů a poté provede ověření pomocí získaných umístění.
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
Ověření databáze, které používá ručně spravované úložiště pro digesty
Při použití ručního úložiště digest pro generování a ukládání databázových digestů se uložená procedura sp_verify_database_ledger slouží k ověření databáze registru. Obsah JSON souhrnu je připojen v uložené proceduře. Při spuštění ověření databáze můžete ověřit všechny tabulky v databázi nebo ověřit konkrétní tabulky.
Následující kód je příkladem spuštění uložené procedury sp_verify_database_ledger s předáním dvou hodnot hash pro ověření:
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"
}
]';
Návratové kódy pro sp_verify_database_ledger
a sp_verify_database_ledger_from_digest_storage
jsou 0
(úspěch) nebo 1
(selhání).
Doporučení
V ideálním případě chcete minimalizovat nebo dokonce eliminovat mezeru mezi časem, kdy k útoku došlo, a časem jeho zjištění. Microsoft doporučuje pravidelně naplánovat ověření účetní knihy, aby se zabránilo nutnosti obnovy databáze z před několika dnů nebo měsíců po zjištění manipulace . O intervalu ověřování by měl rozhodnout zákazník, ale mějte na paměti, že ověřování účetní knihy může být náročné na zdroje. Doporučujeme ho spustit během časového období údržby nebo mimo špičku.
Plánování ověření databáze ve službě Azure SQL Database je možné provést pomocí elastických úloh nebo služby Azure Automation. K naplánování ověření databáze ve službě Azure SQL Managed Instance a SQL Serveru můžete použít agenta SQL Serveru.
Dovolení
Ověření databáze vyžaduje oprávnění VIEW LEDGER CONTENT
. Podrobnosti o oprávněních souvisejících s tabulkami registru najdete v tématu Oprávnění.