Partage via


Charger en masse des données chiffrées dans des colonnes à l’aide d’Always Encrypted

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Pour charger des données chiffrées sans effectuer de vérifications de métadonnées sur le serveur pendant les opérations de copie en bloc, créez l’utilisateur avec l’option ALLOW_ENCRYPTED_VALUE_MODIFICATIONS . Cette option est destinée à être utilisée par les outils hérités ou les flux de travail Extract-Transform-Load tiers (ETL) qui ne peuvent pas utiliser Always Encrypted. Cela permet à un utilisateur de déplacer des données en toute sécurité d’un ensemble de tables contenant des colonnes chiffrées vers un autre ensemble de tables avec des colonnes chiffrées (dans la même base de données ou dans une autre).

Option ALLOW_ENCRYPTED_VALUE_MODIFICATIONS

CREATE USER et ALTER USER ont une ALLOW_ENCRYPTED_VALUE_MODIFICATIONS option. Lorsqu’elle est définie sur ON (la valeur par défaut est OFF), cette option supprime les vérifications des métadonnées de chiffrement sur le serveur dans les opérations de copie en bloc, ce qui permet à l’utilisateur de copier en bloc des données chiffrées entre des tables ou des bases de données, sans déchiffrer les données.

Scénarios de migration des données

Le tableau suivant présente les paramètres appropriés recommandés pour plusieurs scénarios de migration.

Capture d’écran d’un tableau montrant les paramètres recommandés appropriés pour plusieurs scénarios de migration.

Charger en bloc des données chiffrées

Procédez comme suit pour charger des données chiffrées.

  1. Définissez l’option de l’utilisateur cible de l’opération de copie en bloc dans la base de données sur ON. Par exemple :

     ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;
    
  2. Exécutez votre application de copie en bloc ou l’outil de connexion avec l’identité de cet utilisateur. (Si votre application utilise un pilote client activé Always Encrypted, assurez-vous que la chaîne de connexion de la source de données ne contient column encryption setting=enabled pas pour garantir que les données récupérées à partir de colonnes chiffrées restent chiffrées. Pour plus d’informations, consultez Développer des applications à l’aide d’Always Encrypted.)

  3. Définissez l’option ALLOW_ENCRYPTED_VALUE_MODIFICATIONS sur OFF. Par exemple :

    ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;
    

Risque d’altération des données

Une utilisation incorrecte de cette option peut entraîner une altération des données. L’option ALLOW_ENCRYPTED_VALUE_MODIFICATIONS permet à l’utilisateur d’insérer des données dans des colonnes chiffrées dans la base de données, y compris les données chiffrées avec différentes clés, chiffrées incorrectement ou non chiffrées du tout. Si l’utilisateur copie accidentellement les données qui ne sont pas correctement chiffrées à l’aide du schéma de chiffrement (clé de chiffrement de colonne, algorithme, type de chiffrement) configurée pour la colonne cible, vous ne pouvez pas déchiffrer les données (les données sont endommagées). Cette option doit être utilisée avec précaution, car il risque d’endommager les données dans la base de données.

Le scénario suivant indique comment une importation de données incorrecte peut entraîner un endommagement des données :

  1. L’option est définie ON pour un utilisateur.

  2. L’utilisateur exécute l’application qui se connecte à la base de données. L’application utilise des API en bloc pour insérer des valeurs en texte brut dans des colonnes chiffrées. L’application attend un pilote client compatible avec Always Encrypted pour chiffrer les données lors de l’insertion. Toutefois, l’application est mal configurée, de sorte qu’elle finit par utiliser un pilote qui ne prend pas en charge Always Encrypted ou que la chaîne de connexion ne contient column encryption setting=enabledpas .

  3. L’application envoie des valeurs en texte en clair au serveur. Les contrôles des métadonnées de chiffrement étant désactivés dans le serveur pour l’utilisateur, le serveur permet l’insertion de données incorrectes (texte brut au lieu de texte correctement chiffré) dans une colonne chiffrée.

  4. La même ou une autre application se connecte à la base de données à l’aide d’un pilote activé par Always Encrypted et avec column encryption setting=enabled la chaîne de connexion, et récupère les données. L’application s’attend à ce que les données soient déchiffrées en toute transparence. Toutefois, le pilote n’est pas en mesure de déchiffrer les données, car il s’agit de textes chiffrés incorrects.

Bonnes pratiques

Utilisez les comptes d’utilisateur désignés pour les charges de travail de longue durée utilisant cette option.

Pour les applications ou outils de copie en bloc de courte durée qui doivent déplacer des données chiffrées sans les déchiffrer, définissez l'option sur ON immédiatement avant d'exécuter l'application et revenez à off immédiatement après l'exécution de la tâche.

N’utilisez pas cette option pour développer de nouvelles applications. Au lieu de cela, utilisez un pilote client qui offre une API pour supprimer les vérifications de métadonnées de chiffrement pour une seule session, comme l’option AllowEncryptedValueModifications dans le fournisseur de données .NET Framework pour SQL Server - consultez Copie de données chiffrées à l’aide de SqlBulkCopy.