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 v databázi nakonfigurujete automatické ukládání digest, postupujte podle pokynů v části T-SQL využívající automatické ukládání 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 AS NVARCHAR (MAX) = (SELECT *
                                                   FROM sys.database_ledger_digest_locations
                                                   FOR JSON AUTO, INCLUDE_NULL_VALUES);
    SELECT @digest_locations AS digest_locations;
    BEGIN TRY
        EXECUTE 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ě Ledger 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 souhrny 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í editoru Visual Studio Code

  4. Otevřete sadu výsledků 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:

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

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

    • is_current určuje, zda je umístění path aktuální (true) nebo předchozí (false).

      [
      {
           "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é

    Když spustíte ověření registru, zkontrolujte umístění digest_locations a ujistěte se, že se digesty použité při ověření načítají z očekávaných míst. Ujistěte se, že privilegovaný uživatel nezmění umístění úložiště digest na nechráněné umístění úložiště, jako je Azure Storage, bez nakonfigurované a uzamčené zásady neměnnosti.

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

    • Pokud v databázi není žádná manipulace, zobrazí se zpráva:

      Ledger verification successful
      
    • Pokud v databázi dojde 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.