Partager via


Always Encrypted - Fonctionnement des requêtes sur des colonnes chiffrées

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

Pour exécuter une requête sur des colonnes de base de données chiffrées, insérer des données dans ces colonnes, récupérer des valeurs en texte clair ou effectuer des opérations prises en charge (telles que des recherches de recherche de point) à l’aide du chiffrement déterministe, l’utilisateur ou l’application qui émet la requête doit remplir les conditions préalables suivantes :

  • Avoir accès à la clé principale de colonne protégeant les données. Cet accès à la clé est requis en plus des autorisations au niveau de la base de données, telles que SELECT sur la table appropriée.
  • Se connecter à la base de données avec Always Encrypted activé dans la connexion de base de données. La plupart des outils SQL et des pilotes des clients SQL prennent en charge l’activation d’Always Encrypted pour les connexions de base de données.

Remarque

Si l’utilisateur dispose des autorisations nécessaires pour lire les données, mais qu’il n’a pas accès aux clés qui les protègent, il peut toujours récupérer les données cryptées en se connectant à la base de données sans activer Always Encrypted dans la connexion de base de données.

Capture d’écran du schéma sur le fonctionnement des requêtes sur des colonnes chiffrées.

Voici comment fonctionnent les requêtes sur des colonnes chiffrées :

  1. Lorsqu’une application émet une requête paramétrable, le pilote client SQL au sein de l’application contacte de manière transparente le Moteur de base de données (en appelant sp_describe_parameter_encryption pour déterminer quels paramètres ciblent les colonnes chiffrées et doivent être chiffrés. Pour chaque paramètre devant être chiffré, le pilote reçoit l’algorithme de chiffrement, le type de chiffrement et les métadonnées de clé, y compris la clé de chiffrement de la colonne chiffrée et l’emplacement de sa clé principale de colonne correspondante.
  2. Le pilote appelle le magasin de clés, qui contient la clé principale de colonne permettant de déchiffrer les valeurs des clés de chiffrement des colonnes chiffrées. Les clés de chiffrement de colonne en texte clair obtenues sont mise en cache pour réduire le nombre d’allers-retours avec le magasin de clés lors des utilisations suivantes des mêmes clés de chiffrement de colonne.
  3. Le pilote utilise les clés de chiffrement de colonne en texte clair obtenues pour chiffrer les paramètres de requête correspondant aux colonnes chiffrées.
  4. Le pilote remplace les valeurs en texte clair des paramètres ciblant les colonnes chiffrées par leurs valeurs chiffrées, puis envoie la requête au moteur de base de données pour traitement.
  5. Le moteur de base de données exécute la requête, qui peut impliquer des comparaisons d’égalité sur les colonnes en utilisant un chiffrement déterministe.
  6. Si les résultats de requête incluent des données provenant de colonnes chiffrées, le moteur de base de données attache au jeu de résultats des métadonnées de chiffrement pour chaque colonne, y compris les informations sur l’algorithme de chiffrement, le type de chiffrement et les métadonnées de clé.
  7. Le moteur de base de données envoie le jeu de résultats à l’application cliente.
  8. Pour chaque colonne chiffrée du jeu de résultats reçu, le pilote tente d’abord de trouver la clé de chiffrement de colonne en texte clair dans le cache local et il effectue un aller-retour vers un magasin de clés contenant la clé principale de colonne seulement s’il ne trouve pas la clé dans le cache.
  9. Le pilote déchiffre les résultats et retourne des valeurs en texte clair à l’application.

Un pilote client interagit avec un magasin de clés, qui contient une clé principale de colonne, à l’aide d’un fournisseur de magasins de clé principale de colonne, qui est un composant logiciel côté client qui encapsule un magasin de clé contenant la clé principale de colonne. Des fournisseurs pour les types courants de magasins de clés sont disponibles dans les bibliothèques de pilotes côté client de Microsoft ou sous forme de téléchargements autonomes. Vous pouvez également implémenter votre propre fournisseur. Les fonctionnalités d’Always Encrypted, notamment les fournisseurs de magasins de clés principales de colonne intégrés, varient en fonction de la bibliothèque de pilotes et de sa version.

Consultez Développer des applications à l’aide d’Always Encrypted pour obtenir la liste des pilotes clients prenant en charge Always Encrypted et pour plus d’informations sur le développement d’applications qui interrogent des colonnes chiffrées.

Vous pouvez également interroger des colonnes chiffrées à l’aide d’outils SQL, par exemple interroger des colonnes avec Always Encrypted avec Azure Data Studio ou interroger des colonnes à l’aide d’Always Encrypted avec SQL Server Management Studio.