Vérifier une table du registre pour détecter une falsification

S’applique à : SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

Cet article explique comment vérifier l’intégrité des données dans les tables de votre registre. Si vous avez configuré le stockage de synthèse automatique sur votre base de données, suivez la section de stockage de synthèse automatique T-SQL. Sinon, suivez la section T-SQL avec synthèse générée manuellement.

Prérequis

Exécuter une vérification de registre pour la base de données

  1. Connectez-vous à votre base de données à l’aide de SQL Server Management Studio ou d’Azure Data Studio.

  2. Créez une requête avec l’instruction T-SQL suivante :

    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
    

    Remarque

    Le script de vérification est également disponible dans le portail Azure. Ouvrez le portail Azureet recherchez la base de données que vous souhaitez vérifier. Dans Sécurité, sélectionnez l’option Registre. Dans le volet Registre, sélectionnez </> Vérifier la base de données.

  3. exécutez la requête. Vous verrez que digest_locations renvoie l’emplacement actuel de stockage de vos synthèses de base de données et tout éventuel emplacement précédent. Result renvoie la réussite ou la défaillance de la vérification du registre.

    Screenshot of running ledger verification by using Azure Data Studio.

  4. Ouvrez l’ensemble de résultats de digest_locations pour afficher les emplacements de vos synthèses. L’exemple suivant montre deux emplacements de stockage de synthèse pour cette base de données :

    • path indique l’emplacement des synthèses.

    • last_digest_block_id indique l’ID de bloc de la dernière synthèse stockée dans l’emplacement path.

    • is_current indique si l’emplacement dans path est l’actuel (true) ou le précédent (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
       }
      ]
      

    Important

    Lorsque vous exécutez la vérification du registre, inspectez l’emplacement de digest_locations pour vous assurer que les synthèses utilisées dans la vérification sont récupérés à partir des emplacements attendus. Vous devez vous assurer qu’un utilisateur privilégié n’a pas remplacé les emplacements du stockage de synthèse par un emplacement de stockage non protégé, tel que le Stockage Azure, sans avoir configuré et verrouillé de stratégie d’immuabilité.

  5. La vérification renvoie le message suivant dans la fenêtre Résultats.

    • Si votre base de données n’a pas été falsifiée, le message est :

      Ledger verification successful
      
    • Si votre base de données a été falsifiée, l’erreur suivante apparaît dans la fenêtre Messages :

      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.