Partager via


Toujours Chiffré

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

Diagramme d’Always Encrypted.

Always Encrypted et Always Encrypted avec enclaves sécurisées sont des fonctionnalités conçues pour protéger les informations sensibles, notamment les numéros de carte de crédit et les numéros d’identification nationaux ou régionaux (tels que les numéros de sécurité sociale des États-Unis), dans Azure SQL Database, Azure SQL Managed Instance et les bases de données SQL Server. Vous pouvez chiffrer des données sensibles dans les applications clientes, ce qui garantit que les clés de chiffrement ne sont jamais exposées au moteur de base de données. Cette approche offre une séparation entre ceux qui possèdent les données et peuvent les afficher, et ceux qui gèrent les données, mais qui ne doivent pas avoir accès : administrateurs de base de données locaux, opérateurs de base de données cloud ou autres utilisateurs non autorisés à privilège élevé. Par conséquent, Always Encrypted permet aux clients de stocker leurs données sensibles dans le cloud en toute sécurité et de réduire le risque de vol de données par des utilisateurs internes malveillants.

Always Encrypted a certaines restrictions, telles que l’incapacité d’effectuer des opérations sur des données chiffrées, notamment le tri et le filtrage (à l’exception des recherches de point à l’aide du chiffrement déterministe). Cette limitation signifie que certaines requêtes et applications peuvent ne pas être compatibles avec Always Encrypted ou nécessiter des modifications importantes de la logique d’application.

Pour résoudre ces limitations, Always Encrypted avec enclaves sécurisées permet au moteur de base de données de traiter les données chiffrées au sein d’une zone de mémoire protégée appelée enclave sécurisée. Les enclaves sécurisées améliorent les fonctionnalités de calcul confidentiel d’Always Encrypted grâce à la prise en charge de la mise en correspondance des modèles, différents opérateurs de comparaison et le chiffrement en place.

Always Encrypted garantit un chiffrement sans accroc pour les applications. Sur le client, le pilote always Encrypted chiffre les données sensibles avant de les envoyer au moteur de base de données et réécrit automatiquement les requêtes pour gérer la sémantique de l’application. Par ailleurs il déchiffre automatiquement les résultats des requêtes provenant des colonnes de bases de données chiffrées.

Configurer Always Encrypted

Remarque

Pour les applications qui doivent effectuer des correspondances de modèle, utiliser des opérateurs de comparaison, trier et indexer sur des colonnes chiffrées, implémentez Always Encrypted avec enclaves sécurisées.

Cette section fournit une vue d’ensemble de la configuration d’Always Encrypted. Pour plus d’informations et pour commencer, consultez Tutoriel : prise en main d’Always Encrypted.

Pour configurer Always Encrypted dans votre base de données, procédez comme suit :

  1. Provisionnez des clés de chiffrement pour protéger vos données. Always Encrypted utilise deux types de clés :

    • Clés de chiffrement de colonne
    • Clés principales de colonne

    Une clé de chiffrement de colonne chiffre les données dans une colonne chiffrée. Une clé principale de colonne est une clé de protection de clé qui chiffre une ou plusieurs clés de chiffrement de colonne.

    Stockez les clés principales de colonne dans un magasin de clés approuvé en dehors du système de base de données, tel qu’Azure Key Vault, le magasin de certificats Windows ou un module de sécurité matériel. Après cette étape, configurez les clés de chiffrement de colonne et chiffrez chaque clé avec une clé principale de colonne.

    Enfin, enregistrez les métadonnées relatives aux clés dans votre base de données. Les métadonnées de clé principale de colonne incluent l’emplacement de la clé principale de colonne. Les métadonnées de clé de chiffrement de colonne contiennent la valeur chiffrée de la clé de chiffrement de colonne. Le moteur de base de données ne stocke ni n’utilise aucune clé en texte en clair.

    Pour plus d’informations sur la gestion des clés Always Encrypted, consultez Vue d’ensemble de la gestion de clés pour Always Encrypted.

  2. Configurez le chiffrement pour des colonnes de base de données spécifiques qui incluent des informations sensibles pour garantir la protection. Cette étape peut nécessiter la création de tables avec des colonnes chiffrées ou le chiffrement des colonnes et données existantes. Lors de la configuration du chiffrement pour une colonne, spécifiez des détails sur l’algorithme de chiffrement, la clé de chiffrement de colonne pour protéger les données et le type de chiffrement. Always Encrypted prend en charge deux types de chiffrement :

    • Le chiffrement déterministe génère toujours la même valeur chiffrée pour une valeur en texte clair donnée. En utilisant le chiffrement déterministe, vous pouvez effectuer des recherches de points, des jointures d’égalité, un regroupement et une indexation sur des colonnes chiffrées. Toutefois, les utilisateurs non autorisés peuvent deviner des informations sur les valeurs chiffrées en examinant des modèles dans la colonne chiffrée, en particulier s’il existe un petit ensemble de valeurs chiffrées possibles, telles que True/False, ou la région Nord/Sud/Est/Ouest.

    • Le chiffrement aléatoire utilise une méthode qui chiffre les données de manière imprévisible. Les entrées en texte brut identiques produisent un résultat chiffré différent. Cette méthode améliore la sécurité du chiffrement aléatoire.

Pour effectuer des correspondances de modèles à l’aide d’opérateurs de comparaison, de tri et d’indexation sur des colonnes chiffrées, adoptez Always Encrypted avec enclaves sécurisées et appliquez un chiffrement aléatoire. Le chiffrement aléatoire Always Encrypted (sans enclaves sécurisées) ne prend pas en charge la recherche, le regroupement, l’indexation ou la jointure sur des colonnes chiffrées. Au lieu de cela, pour les colonnes destinées à des fins de recherche ou de regroupement, vous devez utiliser le chiffrement déterministe. Ce type de chiffrement permet des opérations telles que les recherches de points, les jointures d’égalité, le regroupement et l’indexation sur des colonnes chiffrées.

Étant donné que le système de base de données par conception n’a pas accès aux clés de chiffrement, tout chiffrement de colonne nécessite le déplacement et le chiffrement des données en dehors de la base de données. Le processus de chiffrement peut prendre beaucoup de temps et est vulnérable aux interruptions réseau. En outre, si vous devez rechiffrer une colonne ultérieurement, par exemple lors de la rotation de la clé de chiffrement ou de la modification des types de chiffrement, vous rencontrez à nouveau les mêmes difficultés. L’utilisation d’Always Encrypted avec enclaves sécurisées élimine la nécessité de déplacer les données hors de la base de données. Étant donné que l’enclave est approuvée, un pilote client au sein de votre application ou un outil tel que SQL Server Management Studio (SSMS) peut partager en toute sécurité les clés avec l’enclave pendant les opérations de chiffrement. L’enclave peut ensuite chiffrer ou rechiffrer des colonnes en place, réduisant considérablement le temps nécessaire pour ces actions.

Pour plus d’informations sur les algorithmes de chiffrement Always Encrypted, consultez Chiffrement Always Encrypted.

Vous pouvez effectuer les étapes précédentes à l’aide d’outils SQL :

Pour vous assurer que les clés Always Encrypted et les données sensibles protégées ne sont jamais révélées en texte clair dans l’environnement de base de données, le moteur de base de données ne peut pas être impliqué dans le provisionnement de clés et le chiffrement des données ou les opérations de déchiffrement. Par conséquent, Transact-SQL (T-SQL) ne prend pas en charge le provisionnement de clés ni les opérations de chiffrement. Pour la même raison, le chiffrement des données existantes ou leur rechiffrement (avec un type de chiffrement différent ou une clé de chiffrement de colonne) doit être effectué en dehors de la base de données (des outils SQL peuvent automatiser cela).

Après avoir modifié la définition d’une colonne chiffrée, exécutez sp_refresh_parameter_encryption pour mettre à jour les métadonnées Always Encrypted de l’objet.

Limites

Les limitations suivantes s’appliquent aux requêtes sur les colonnes chiffrées :

  • Vous ne pouvez pas effectuer de calculs sur des colonnes chiffrées avec un chiffrement aléatoire. Le chiffrement déterministe prend en charge les opérations suivantes qui impliquent des comparaisons d’égalité. Aucune autre opération n’est autorisée :

    Remarque

    Pour les applications qui doivent effectuer des correspondances de modèle, utiliser des opérateurs de comparaison, trier et indexer sur des colonnes chiffrées, implémentez Always Encrypted avec enclaves sécurisées.

  • Vous ne pouvez pas utiliser d’instructions de requête qui déclenchent des calculs impliquant à la fois du texte en clair et des données chiffrées. Par exemple :

    • Comparaison d’une colonne chiffrée à une colonne en texte clair ou à un littéral.
    • Copie de données d’une colonne en texte clair vers une colonne chiffrée (ou de l’autre façon) UPDATE, BULK INSERT, SELECT INTOou INSERT..SELECT.
    • Insertion de littéraux dans des colonnes chiffrées.

    Ces instructions entraînent des erreurs de conflit d’opérandes comme celle-ci :

    Msg 206, Level 16, State 2, Line 89
        Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char
    

    Les applications doivent utiliser des paramètres de requête pour fournir des valeurs pour les colonnes chiffrées. Par exemple, lorsque vous insérez des données dans des colonnes chiffrées ou que vous les filtrez à l’aide du chiffrement déterministe, utilisez des paramètres de requête. La transmission de littéraux ou de variables T-SQL qui correspondent à des colonnes chiffrées n’est pas prise en charge. Pour plus d’informations spécifiques à un pilote de client que vous utilisez, consultez Développer des applications en utilisant Always Encrypted.

    Dans SSMS, il est essentiel d’appliquer le paramétrage pour les variables Always Encrypted pour exécuter des requêtes qui gèrent les valeurs associées aux colonnes chiffrées. Cette exigence inclut des scénarios tels que l’insertion de données dans des colonnes chiffrées ou l’application de filtres sur eux (dans les cas où le chiffrement déterministe est utilisé).

  • Les paramètres tabulaires ciblant des colonnes chiffrées ne sont pas pris en charge.

  • Les requêtes qui utilisent les clauses suivantes ne sont pas prises en charge :

  • Always Encrypted n’est pas pris en charge pour les colonnes avec les caractéristiques suivantes :

    • Colonnes utilisant l’un des types de données suivants : xml, timestamp, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, vector, alias, types définis par l’utilisateur.
    • Colonnes FILESTREAM.
    • Colonnes avec la propriété IDENTITY.
    • Colonnes avec la propriété ROWGUIDCOL.
    • Colonnes de chaîne (varchar, char et autres) avec des interclassements autres que les interclassements de point de code binaire (_BIN2). Le classement ne doit pas différer du classement par défaut de la base de données.
    • Colonnes qui sont des clés pour des index cluster et non-cluster lors de l’utilisation du chiffrement aléatoire (les index sur les colonnes utilisant un chiffrement déterministe sont pris en charge).
    • Colonnes incluses dans des index de recherche en texte intégral (Always Encrypted ne prend pas en charge la recherche en texte intégral).
    • Spécifier les colonnes calculées dans une table.
    • Colonnes référencées par des colonnes calculées lorsque l’expression effectue des opérations non prises en charge par Always Encrypted.
    • Utiliser des colonnes éparses.
    • Colonnes référencées par des statistiques lors de l’utilisation du chiffrement aléatoire (le chiffrement déterministe est pris en charge).
    • Colonnes de partitionnement.
    • Colonnes avec des contraintes par défaut.
    • Colonnes référencées par des contraintes uniques en cas d’utilisation du chiffrement aléatoire (le chiffrement déterministe est pris en charge).
    • Colonnes de clé primaire en cas d’utilisation du chiffrement aléatoire (le chiffrement déterministe est pris en charge).
    • Colonnes de référence dans les contraintes de clé étrangère en cas d’utilisation du chiffrement aléatoire ou déterministe, si les colonnes de référence et référencées utilisent des clés ou algorithmes différents.
    • Colonnes référencées par des contraintes de validation.
      • Colonnes capturées ou suivies à l’aide de la capture de données de changement.
    • Colonnes de clé primaire sur des tables avec suivi des changements.
    • Lorsqu’une colonne d’une table mémoire optimisée est référencée dans un module compilé en mode natif, le chiffrement ne peut être appliqué à aucune des colonnes de cette table.
      • Colonnes dans les tables Stretch Database. (Les tables comportant des colonnes chiffrées avec Always Encrypted peuvent être activées pour l’extension.)

    Important

    Stretch Database est déprécié dans SQL Server 2022 (16.x) et Azure SQL Database. Cette fonctionnalité sera supprimée dans une version future de moteur de base de données. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

    • Colonnes de tables externes (PolyBase) (remarque : l’utilisation de tables externes et de tables avec des colonnes chiffrées dans la même requête est prise en charge).
  • Les fonctionnalités suivantes ne fonctionnent pas sur les colonnes chiffrées :

Informations de référence sur Transact-SQL Always Encrypted

Always Encrypted utilise les instructions, vues de catalogue système, procédures stockées système et autorisations Transact-SQL suivantes.

Relevés

Instruction DDL Descriptif
CRÉER UNE CLÉ MAÎTRE DE COLONNE Crée un objet de métadonnées de clé principale de colonne dans une base de données
DROP COLUMN MASTER KEY Supprime une clé principale de colonne d’une base de données.
CRÉER UNE CLÉ DE CHIFFREMENT DE COLONNE Crée un objet de métadonnées de clé de chiffrement de colonne.
Clé de cryptage de colonne ALTER Modifie une clé de chiffrement de colonne dans une base de données, en ajoutant ou en supprimant une valeur chiffrée.
SUPPRIMER LA CLÉ DE CHIFFREMENT DE COLONNE Supprime une clé de chiffrement de colonne d’une base de données.
CREATE TABLE (CHIFFRÉ AVEC) Spécifie les colonnes de chiffrement

Vues de catalogue système et procédures stockées

Vues de catalogue système et procédures stockées Descriptif
sys.column_encryption_keys Retourne des informations sur les clés de chiffrement de colonne (CEK)
sys.column_encryption_key_values Retourne des informations sur les valeurs chiffrées des clés de chiffrement de colonne (CEK)
sys.column_master_keys Retourne une ligne pour chaque clé principale de base de données
sp_refresh_parameter_encryption Met à jour les métadonnées Always Encrypted pour les paramètres de la procédure stockée non liée au schéma, fonction définie par l'utilisateur, vue, déclencheur DML, déclencheur DDL au niveau de la base de données ou déclencheur DDL au niveau du serveur
sp_describe_parameter_encryption Analyse l’instruction Transact-SQL spécifiée et ses paramètres pour déterminer quels paramètres correspondent aux colonnes de base de données protégées à l’aide de la fonctionnalité Always Encrypted.

Pour plus d’informations sur les métadonnées de chiffrement stockées pour chaque colonne, consultez sys.columns.

Autorisations de base de données

Always Encrypted utilise quatre autorisations de base de données.

Vues de catalogue système et procédures stockées Descriptif
ALTER ANY COLUMN MASTER KEY Obligatoire pour créer et supprimer les métadonnées de clé principale de colonne.
ALTER ANY COLUMN ENCRYPTION KEY Obligatoire pour créer et supprimer les métadonnées de clé de chiffrement de colonne.
VIEW ANY COLUMN MASTER KEY DEFINITION Obligatoire pour accéder aux métadonnées de clé principale de colonne et les lire, ce qui est nécessaire pour interroger des colonnes chiffrées.
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION Obligatoire pour accéder aux métadonnées de clé de chiffrement principale de colonne et les lire, ce qui est nécessaire pour interroger des colonnes chiffrées.

Le tableau suivant récapitule les autorisations nécessaires pour effectuer des actions courantes.

Scénario ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
Gestion des clés (création, modification ou révision des métadonnées de clé dans la base de données) X X X X
Interrogation de colonnes chiffrées X X

Remarques importantes

  • Les autorisations VIEW ANY COLUMN MASTER KEY DEFINITION et VIEW ANY COLUMN ENCRYPTION KEY DEFINITION sont requises lors de la sélection de colonnes chiffrées. Ces autorisations protègent les colonnes même si l’utilisateur n’a pas l’autorisation d’accéder aux clés principales de colonne dans leurs magasins de clés et empêchent l’accès au texte en clair.

  • Dans SQL Server, le rôle de base de données fixe public accorde à la fois les autorisations VIEW ANY COLUMN MASTER KEY DEFINITION et VIEW ANY COLUMN ENCRYPTION KEY DEFINITION par défaut. Un administrateur de base de données peut choisir de révoquer ou de refuser ces autorisations au rôle public et de les accorder à des rôles ou utilisateurs spécifiques pour implémenter un contrôle plus restreint.

  • Dans SQL Database, le rôle de base de données fixe public n’accorde pas les autorisations VIEW ANY COLUMN MASTER KEY DEFINITION et VIEW ANY COLUMN ENCRYPTION KEY DEFINITION par défaut. Cette modification permet à certains outils hérités existants qui utilisent des versions antérieures de DacFx de fonctionner correctement. Pour utiliser des colonnes chiffrées (même si elles ne sont pas déchiffrées), un administrateur de base de données doit explicitement accorder les autorisations VIEW ANY COLUMN MASTER KEY DEFINITION et VIEW ANY COLUMN ENCRYPTION KEY DEFINITION.

Étape suivante