Vérifier une table du registre pour détecter une falsification
S’applique à : SQL Server 2022 (16.x)base de données Azure SQL Azure 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 automatique des résumés sur votre base de données, suivez la section T-SQL utilisant le stockage automatique des résumés. Sinon, suivez la section T-SQL avec synthèse générée manuellement.
Prérequis
- Disposer d’un abonnement Azure actif si vous utilisez la base de données Azure SQL ou Azure SQL Managed Instance. Si vous n’en avez pas, créez un compte gratuit.
- Créer et utiliser des tables de registre pouvant être mises à jour ou créer et utiliser des tables de registre par ajout uniquement
- SQL Server Management Studio ou Azure Data Studio.
- L’option de base de données ALLOW_SNAPSHOT_ISOLATION doit être activée sur la base de données avant de pouvoir exécuter les procédures stockées de vérification.
Exécuter une vérification de registre pour la base de données
Connectez-vous à votre base de données à l’aide de SQL Server Management Studio ou d’Azure Data Studio.
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.
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.
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é.
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.