Partager via


Vérification de base de données

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

Le registre fournit une forme d’intégrité des données appelée forward integrity, qui donne la preuve de la falsification des données dans vos tables de registre. Le processus de vérification de base de données prend comme entrée une ou plusieurs synthèses de base de données précédemment générées. Il recalcule ensuite les hachages stockés dans le registre de base de données sur la base de l’état actuel des tables de registre. Si les hachages calculés ne correspondent pas aux synthèses en entrée, la vérification échoue. L’échec indique que les données ont été falsifiées. Le processus de vérification signale toutes les incohérences détectées.

Processus de vérification de base de données

Le processus de vérification analyse toutes les tables d’historique et de registre. Il recalcule les hachages SHA-256 de leurs lignes et les compare aux fichiers de synthèse de base de données passés à la procédure stockée de vérification.

Étant donné que la vérification du registre recalcule tous les codes de hachage des transactions dans la base de données, il peut s’agir d’un processus gourmand en ressources pour des bases de données volumineuses. Pour réduire le coût de la vérification, la fonctionnalité offre des options permettant de vérifier des tables de registre individuellement ou seulement un sous-ensemble des tables du registre.

Vous effectuez la vérification de base de données par le biais de deux procédures stockées, selon que vous utilisez le stockage automatique des synthèses ou que vous gérez manuellement les synthèses.

Remarque

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.

Vérification de base de données qui utilise le stockage automatique des synthèses

Quand vous utilisez le stockage automatique des synthèses pour générer et stocker les synthèses de base de données, l’emplacement de stockage des synthèses est dans la vue catalogue système sys.database_ledger_digest_locations sous forme d’objets JSON. L’exécution de la vérification de base de données consiste à exécuter la procédure stockée système sp_verify_database_ledger_from_digest_storage. Spécifiez les objets JSON de la vue catalogue système sys.database_ledger_digest_locations où les synthèses de base de données doivent être stockées (d’après la configuration).

Lorsque vous utilisez le stockage automatique des synthèses, vous pouvez changer les emplacements de stockage pendant tout le cycle de vie des tables de registre. Par exemple, vous pouvez commencer à utiliser le stockage immuable Azure pour stocker vos fichiers de synthèse, puis décider par la suite d’utiliser le Registre confidentiel Azure à la place. Ce changement d’emplacement est stocké dans sys.database_ledger_digest_locations.

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é.

Pour simplifier l’exécution de la vérification quand vous utilisez plusieurs emplacements de stockage de synthèses, le script suivant récupère les emplacements des synthèses et exécute la vérification à l’aide de ces emplacements.

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

Vérification de base de données qui utilise le stockage manuel des synthèses

Quand vous utilisez le stockage manuel des synthèses pour générer et stocker les synthèses de base de données, la procédure stockée sp_verify_database_ledger est utilisée pour vérifier le registre de base de données. Le contenu JSON de la synthèse est ajouté à la procédure stockée. Quand vous exécutez la vérification de base de données, vous pouvez choisir de vérifier toutes les tables de la base de données ou des tables spécifiques.

Le code suivant est un exemple d’exécution de la procédure stockée sp_verify_database_ledger en passant deux synthèses pour vérification :

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"
    }
]';

Les codes de retour de sp_verify_database_ledger et sp_verify_database_ledger_from_digest_storage sont 0 (réussite) ou 1 (échec).

Recommandation

Dans l’idéal, vous souhaitez réduire ou même éliminer l’écart entre le moment où l’attaque s’est produite et le moment où elle a été détectée. Microsoft recommande de planifier régulièrement la vérification du registre pour éviter une restauration de la base de données des jours ou des mois après la détection de falsification. L’intervalle de vérification doit être décidé par le client, mais sachez que la vérification du registre peut être consommatrice de ressources. Nous vous recommandons de l’exécuter pendant une fenêtre de maintenance ou en dehors des heures de pointe.

La planification de la vérification de la base de données dans Azure SQL Database peut être effectuée avec des tâches élastiques ou Azure Automation. Pour la planification de la vérification de la base de données dans Azure SQL Managed Instance et SQL Server, vous pouvez utiliser SQL Server Agent.

Autorisations

La vérification de la base de données nécessite l'autorisation VIEW LEDGER CONTENT. Pour plus d’informations sur les autorisations associées aux tables du registre, consultez Autorisations.