Sdílet prostřednictvím


Ověření tabulky registru pro detekci manipulace

Platí pro: SQL Server 2022 (16.x) a novější verze Azure SQL DatabaseAzure SQL Managed Instance

V tomto článku ověříte integritu dat v tabulkách registru. Pokud jste ve své databázi nakonfigurovali automatické úložiště digest, postupujte podle oddílu T-SQL s použitím automatického úložiště digest. V opačném případě postupujte podle části T-SQL pomocí ručně generovaného souhrnu.

Požadavky

Proveďte ověření účetní knihy pro databázi

  1. Připojte se k databázi pomocí aplikace SQL Server Management Studio.

  2. Vytvořte nový dotaz s následujícím příkazem T-SQL:

    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
    

    Poznámka:

    Ověřovací skript najdete také na webu Azure Portal. Otevřete Azure Portal a vyhledejte databázi, kterou chcete ověřit. V části Zabezpečení vyberte možnost Ledger. V podokně Registru vyberte </> Ověřit databázi.

  3. Spusťte dotaz. Uvidíte, že digest_locations vrátí aktuální umístění, kde jsou uloženy hodnoty hash databáze a všechna předchozí umístění. Výsledek vrátí úspěch nebo selhání ověření registru.

    Snímek obrazovky se spuštěním ověření registru pomocí nástroje Azure Data Studio

  4. Otevřete sadu výsledků digest_locations a zobrazte umístění svých digestů. Následující příklad ukazuje dvě umístění úložiště digest pro tuto databázi:

    • cesta označuje umístění hodnot hash.

    • last_digest_block_id označuje ID bloku posledního digestu uloženého v umístění cesty .

    • is_current označuje, jestli je umístění na cestě současné (pravda) nebo předchozí (nepravdivé).

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

    Důležité

    Při spuštění ověření registru zkontrolujte umístění digest_locations a ujistěte se, že se hodnoty hash použité při ověření 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.

  5. V okně Výsledky vrátí ověření následující zprávu.

    • Pokud v databázi nedošlo k manipulaci, zpráva je následující:

      Ledger verification successful
      
    • Pokud v databázi došlo k manipulaci, zobrazí se v okně Zprávy následující chyba:

      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.