Tables de registre avec ajout uniquement

S’applique à : SQL Server 2022 (16.x) et versions ultérieures d’Azure SQL DatabaseAzure SQL Managed Instance

Les tables de registre en ajout seul autorisent seulement les opérations INSERT sur vos tables, qui garantissent que les utilisateurs privilégiés, par exemple les administrateurs de base de données, ne peuvent pas modifier les données à l’aide d’opérations de langage de manipulation de données traditionnelles. Les tables de registre en ajout seul sont idéales pour les systèmes qui ne mettent pas à jour ou ne suppriment pas les enregistrements, par exemple les systèmes d’informations de sécurité et gestion d’événements ou les systèmes blockchain dans lesquels les données doivent être répliquées à partir du blockchain sur une base de données. Comme aucune opération UPDATE ou DELETE n’est effectuée sur une table en ajout seul, vous n’avez pas besoin de la table d’historique correspondante, contrairement aux tables de registre pouvant être mises à jour.

Diagramme qui montre l’architecture des tables de registre.

Vous pouvez créer une table de registre d’ajout uniquement en spécifiant l’argument LEDGER = ON dans votre CREATE TABLE instruction (Transact-SQL) et en spécifiant l’option APPEND_ONLY = ON .

Important

Une fois qu’une table a été créée comme table de registre, elle ne peut pas être redéfinie comme table sans fonctionnalités de registre. En conséquence, un attaquant ne pourra pas temporairement supprimer les fonctionnalités de registre, effectuer des changements, puis réactiver les fonctionnalités de registre.

Schéma de la table de registre d’ajout uniquement

Une table d’ajout uniquement doit avoir les colonnes GENERATED ALWAYS suivantes qui contiennent des métadonnées indiquant les transactions qui ont modifié la table et l’ordre des opérations par lesquelles les lignes ont été mises à jour par la transaction. Lorsque vous créez une table de registre à ajout seul, des colonnes GENERATED ALWAYS seront créées dans votre table de registre. Ces données sont utiles pour comprendre comment les données ont été insérées au fil du temps.

Si vous ne spécifiez pas les définitions des GENERATED ALWAYS colonnes dans l’instruction CREATE TABLE , le système les ajoute automatiquement à l’aide des noms par défaut suivants.

Nom de colonne par défaut Type de données Description
ledger_start_transaction_id bigint ID de la transaction qui a créé une version de ligne
grand_livre_numéro_de_séquence_de_début bigint Numéro de séquence d’une opération dans une transaction qui a créé une version de ligne

Vue de registre

Pour chaque table de registre en ajout seul, le système génère automatiquement une vue, appelée la vue de registre. La vue de registre indique toutes les insertions de ligne qui se sont produites sur la table. La vue de registre est principalement utile pour les tables de registre pouvant être mises à jour, plutôt que pour les tables de registre en ajout seul, car ces dernières n’ont pas de fonctionnalités UPDATE ou DELETE. La vue du registre pour les tables du registre en ajout seul est disponible afin d’assurer la cohérence entre les tables du registre pouvant être mises à jour et celles en ajout seul.

Schéma de vue du registre

Remarque

Les noms des colonnes d’affichage du registre peuvent être personnalisés lorsque vous créez la table à l’aide du <ledger_view_option> paramètre avec l’instruction CREATE TABLE (Transact-SQL). Pour plus d’informations, consultez les options d’affichage du registre et les exemples correspondants dans CREATE TABLE (Transact-SQL).

Nom de colonne par défaut Type de données Description
ledger_transaction_id bigint ID de la transaction qui a créé ou supprimé une version de ligne.
numéro de séquence du grand livre bigint Numéro de séquence d’une opération au niveau d’une ligne au sein de la transaction sur la table.
ledger_operation_type tinyint Contient 1 (INSERT) ou 2 (DELETE). L’insertion d’une ligne dans la table de registre produit une nouvelle ligne dans la vue de registre qui contient 1 dans cette colonne. La suppression d’une ligne de la table de registre produit une nouvelle ligne dans la vue de registre qui contient 2 dans cette colonne. La mise à jour d’une ligne dans la table de registre produit deux nouvelles lignes dans la vue de registre. Une ligne contient 2 (DELETE) et l’autre ligne contient 1 (INSERT) dans cette colonne. Un DELETE ne doit pas se produire sur une table de registre d’ajout uniquement.
ledger_operation_type_desc nvarchar(128) Contient INSERT ou DELETE. Pour plus d’informations, consultez la ligne précédente.