Always EncryptedAlways Encrypted

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL DatabaseS’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

Always EncryptedAlways Encrypted

Always Encrypted est une fonctionnalité conçue pour protéger les données sensibles, telles que les numéros de carte de crédit ou les numéros nationaux d’identification (par exemple, les numéros de sécurité sociale aux États-Unis), qui sont stockées dans des bases de données Azure SQL DatabaseAzure SQL Database ou SQL ServerSQL Server.Always Encrypted is a feature designed to protect sensitive data, such as credit card numbers or national identification numbers (for example, U.S. social security numbers), stored in Azure SQL DatabaseAzure SQL Database or SQL ServerSQL Server databases. Always Encrypted permet aux clients de chiffrer des données sensibles dans des applications clientes et de ne jamais révéler les clés de chiffrement au Moteur de base de donnéesDatabase Engine (SQL DatabaseSQL Database ou SQL ServerSQL Server).Always Encrypted allows clients to encrypt sensitive data inside client applications and never reveal the encryption keys to the Moteur de base de donnéesDatabase Engine (SQL DatabaseSQL Database or SQL ServerSQL Server). Ainsi, Always Encrypted fournit une séparation entre ceux qui détiennent les données et peuvent les voir, et ceux qui les gèrent mais ne doivent pas y avoir accès.As a result, Always Encrypted provides a separation between those who own the data and can view it, and those who manage the data but should have no access. En empêchant les administrateurs de base de données locales, les opérateurs de base de données cloud ou d’autres utilisateurs avec des privilèges élevés, mais non autorisés, d’accéder aux données chiffrées, Always Encrypted permet aux clients de stocker des données sensibles de manière sécurisée en dehors de leur contrôle direct.By ensuring on-premises database administrators, cloud database operators, or other high-privileged unauthorized users, can't access the encrypted data, Always Encrypted enables customers to confidently store sensitive data outside of their direct control. De cette manière, les organisations peuvent stocker leurs données dans Azure et activer la délégation de l’administration de base de données locale à des tiers, ou réduire les contraintes d’attestation de sécurité pour leur propre personnel d’administration de base de données.This allows organizations to store their data in Azure, and enable delegation of on-premises database administration to third parties, or to reduce security clearance requirements for their own DBA staff.

Always Encrypted fournit des fonctionnalités de calcul confidentiel en permettant au Moteur de base de donnéesDatabase Engine de traiter certaines requêtes sur les données chiffrées, tout en préservant la confidentialité des données et en offrant les avantages de sécurité ci-dessus.Always Encrypted provides confidential computing capabilities by enabling the Moteur de base de donnéesDatabase Engine to process some queries on encrypted data, while preserving the confidentiality of the data and providing the above security benefits. Dans SQL Server 2016 (13.x)SQL Server 2016 (13.x), SQL Server 2017 (14.x)SQL Server 2017 (14.x) et dans Azure SQL DatabaseAzure SQL Database, Always Encrypted prend en charge la comparaison d’égalité par le biais du chiffrement déterministe.In SQL Server 2016 (13.x)SQL Server 2016 (13.x), SQL Server 2017 (14.x)SQL Server 2017 (14.x) and in Azure SQL DatabaseAzure SQL Database, Always Encrypted supports equality comparison via deterministic encryption. Consultez Sélection d’un chiffrement déterministe ou aléatoire.See Selecting Deterministic or Randomized Encryption.

Notes

Dans SQL Server 2019 (15.x)SQL Server 2019 (15.x), les enclaves sécurisées étendent substantiellement les fonctionnalités de calcul confidentiel d’Always Encrypted avec des critères spéciaux, d’autres opérateurs de comparaison et le chiffrement sur place.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), secure enclaves substantially extend confidential computing capabilities of Always Encrypted with pattern matching, other comparison operators and in-place encryption. Consultez Always Encrypted avec enclaves sécurisées.See Always Encrypted with secure enclaves.

Always Encrypted rend le chiffrement transparent pour les applications.Always Encrypted makes encryption transparent to applications. À cette fin, un pilote Always Encrypted installé sur l’ordinateur client chiffre et déchiffre automatiquement les données sensibles dans l’application cliente.An Always Encrypted-enabled driver installed on the client computer achieves this by automatically encrypting and decrypting sensitive data in the client application. Le pilote chiffre les données dans les colonnes sensibles avant de les transmettre au Moteur de base de donnéesDatabase Engineet il réécrit automatiquement les requêtes pour que la sémantique de l’application soit conservée.The driver encrypts the data in sensitive columns before passing the data to the Moteur de base de donnéesDatabase Engine, and automatically rewrites queries so that the semantics to the application are preserved. De même, le pilote déchiffre de manière transparente les données stockées dans les colonnes de base de données chiffrées contenues dans les résultats de requête.Similarly, the driver transparently decrypts data, stored in encrypted database columns, contained in query results.

Always Encrypted est disponible dans toutes les éditions de Azure SQL DatabaseAzure SQL Database, à partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x) et de tous les niveaux de service de SQL DatabaseSQL Database.Always Encrypted is available in all editions of Azure SQL DatabaseAzure SQL Database, starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) and all service tiers of SQL DatabaseSQL Database. (Pour les versions avant SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1, Always Encrypted était limité à l’édition Enterprise.) Pour visualiser une présentation Channel 9 qui aborde Always Encrypted, consultez Keeping Sensitive Data Secure with Always Encrypted(Sécurisation des données sensibles avec Always Encrypted).(Prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1, Always Encrypted was limited to the Enterprise Edition.) For a Channel 9 presentation that includes Always Encrypted, see Keeping Sensitive Data Secure with Always Encrypted.

Scénarios typiquesTypical Scenarios

Client et données locauxClient and data on-premises

Un client dispose d’une application cliente et de SQL ServerSQL Server qui s’exécutent localement, au sein de son entreprise.A customer has a client application and SQL ServerSQL Server both running on-premises, at their business location. Le client souhaite embaucher un fournisseur externe pour administrer SQL ServerSQL Server.The customer wants to hire an external vendor to administer SQL ServerSQL Server. Afin de protéger les données sensibles stockées dans SQL ServerSQL Server, le client utilise toujours Always Encrypted pour garantir la séparation des responsabilités entre les administrateurs de base de données et les administrateurs d’application.In order to protect sensitive data stored in SQL ServerSQL Server, the customer uses Always Encrypted to ensure the separation of duties between database administrators and application administrators. Le client stocke les valeurs en texte clair des clés Always Encrypted dans un magasin de clés approuvé accessible à l’application cliente.The customer stores plaintext values of Always Encrypted keys in a trusted key store, which the client application can access. Les administrateursSQL ServerSQL Server n’ont pas accès aux clés et, de ce fait, ne peuvent pas déchiffrer les données sensibles stockées dans SQL ServerSQL Server.SQL ServerSQL Server administrators have no access to the keys and, therefore, are unable to decrypt sensitive data stored in SQL ServerSQL Server.

Client local avec des données dans AzureClient on-premises with data in Azure

Un client dispose d’une application cliente locale au sein de son entreprise.A customer has an on-premises client application at their business location. L’application manipule des données sensibles stockées dans une base de données hébergée dans Azure (SQL DatabaseSQL Database ou SQL ServerSQL Server s’exécutant dans une machine virtuelle sur Microsoft Azure).The application operates on sensitive data stored in a database hosted in Azure (SQL DatabaseSQL Database or SQL ServerSQL Server running in a virtual machine on Microsoft Azure). Le client utilise Always Encrypted et stocke les clés Always Encrypted dans un magasin de clés approuvé hébergé localement, pour s’assurer que les administrateurs de cloud MicrosoftMicrosoft n’aient pas accès aux données sensibles.The customer uses Always Encrypted and stores Always Encrypted keys in a trusted key store hosted on-premises, to ensure MicrosoftMicrosoft cloud administrators have no access to sensitive data.

Client et données dans AzureClient and Data in Azure

Un client dispose d’une application cliente, hébergée dans Microsoft Azure (par exemple, dans un rôle de travail ou un rôle web), qui manipule des données sensibles également stockées dans une base de données hébergée dans Azure (SQL Database ou SQL Server s’exécutant sur une machine virtuelle Microsoft Azure).A customer has a client application, hosted in Microsoft Azure (for example, in a worker role or a web role), which operates on sensitive data stored in a database hosted in Azure (SQL Database or SQL Server running in a virtual machine on Microsoft Azure). Même si Always Encrypted n’isole pas complètement les données des administrateurs de cloud, puisque les données et les clés sont exposées aux administrateurs de cloud de la plateforme qui héberge la couche cliente, le client tire quand même profit de la réduction de la surface d’attaque (les données sont toujours chiffrées dans la base de données).Although Always Encrypted doesn't provide complete isolation of data from cloud administrators, as both the data and keys are exposed to cloud administrators of the platform hosting the client tier, the customer still benefits from reducing the security attack surface area (the data is always encrypted in the database).

FonctionnementHow it Works

Vous pouvez configurer Always Encrypted pour les colonnes de base de données contenant des données sensibles.You can configure Always Encrypted for individual database columns containing your sensitive data. Quand vous configurez le chiffrement pour une colonne, vous spécifiez les informations sur l’algorithme de chiffrement et les clés de chiffrement utilisées pour protéger les données de la colonne.When setting up encryption for a column, you specify the information about the encryption algorithm and cryptographic keys used to protect the data in the column. Always Encrypted utilise deux types de clés : des clés de chiffrement de colonne et des clés principales de colonne.Always Encrypted uses two types of keys: column encryption keys and column master keys. Une clé de chiffrement de colonne sert à chiffrer les données qui se trouvent dans une colonne chiffrée.A column encryption key is used to encrypt data in an encrypted column. Une clé principale de colonne est une clé de protection de clé qui chiffre une ou plusieurs clés de chiffrement de colonne.A column master key is a key-protecting key that encrypts one or more column encryption keys.

Le moteur de base de données stocke la configuration de chiffrement pour chaque colonne dans des métadonnées de base de données.The Database Engine stores encryption configuration for each column in database metadata. Notez toutefois que le moteur de base de données ne stocke et n’utilise jamais ces clés en texte clair.Note, however, the Database Engine never stores or uses the keys of either type in plaintext. Il stocke uniquement des valeurs chiffrées des clés de chiffrement de colonne et les informations sur l’emplacement des clés principales de colonne, qui sont stockées dans des magasins de clés approuvés externes, tel qu’Azure Key Vault, le magasin de certificats Windows sur un ordinateur client ou un module de sécurité matériel.It only stores encrypted values of column encryption keys and the information about the location of column master keys, which are stored in external trusted key stores, such as Azure Key Vault, Windows Certificate Store on a client machine, or a hardware security module.

Pour accéder aux données stockées dans une colonne chiffrée en texte clair, une application doit utiliser un pilote client compatible avec Always Encrypted.To access data stored in an encrypted column in plaintext, an application must use an Always Encrypted enabled client driver. Quand une application émet une requête paramétrée, le pilote collabore en toute transparence avec le moteur de base de données pour déterminer quels paramètres ciblent des colonnes chiffrées et, par conséquent, doivent être chiffrés.When an application issues a parameterized query, the driver transparently collaborates with the Database Engine to determine which parameters target encrypted columns and, thus, should be encrypted. Pour chaque paramètre qui doit être chiffré, le pilote obtient les informations sur l’algorithme de chiffrement et la valeur chiffrée de la clé de chiffrement de colonne pour la colonne, les cibles de paramètres, ainsi que l’emplacement de la clé principale de colonne correspondante.For each parameter that needs to be encrypted, the driver obtains the information about the encryption algorithm and the encrypted value of the column encryption key for the column, the parameter targets, as well as the location of its corresponding column master key.

Ensuite, le pilote contacte le magasin de clés, qui contient la clé principale de colonne, afin de déchiffrer la valeur de la clé de chiffrement de colonne chiffrée, puis il utilise la clé de chiffrement de colonne en texte clair pour chiffrer le paramètre.Next, the driver contacts the key store, containing the column master key, in order to decrypt the encrypted column encryption key value and then, it uses the plaintext column encryption key to encrypt the parameter. La clé de chiffrement de colonne en texte clair résultante est mise en cache pour réduire le nombre d’allers-retours vers le magasin de clés lors des utilisations ultérieures de la même clé de chiffrement de colonne.The resultant plaintext column encryption key is cached to reduce the number of round trips to the key store on subsequent uses of the same column encryption key. Le pilote remplace les valeurs de texte en clair des paramètres ciblant des colonnes chiffrées par leurs valeurs chiffrées, et il envoie la requête au serveur pour traitement.The driver substitutes the plaintext values of the parameters targeting encrypted columns with their encrypted values, and it sends the query to the server for processing.

Le serveur calcule le jeu de résultats et, pour toutes les colonnes chiffrées dans le jeu de résultats, le pilote attache les métadonnées de chiffrement pour la colonne, notamment les informations sur l’algorithme de chiffrement et les clés correspondantes.The server computes the result set, and for any encrypted columns included in the result set, the driver attaches the encryption metadata for the column, including the information about the encryption algorithm and the corresponding keys. Le pilote tente d’abord de trouver la clé de chiffrement de colonne en texte clair dans le cache local, et il accède à la clé principale de colonne uniquement s’il ne trouve pas la clé dans le cache.The driver first tries to find the plaintext column encryption key in the local cache, and only makes a round to the column master key if it can't find the key in the cache. Ensuite, le pilote déchiffre les résultats et retourne des valeurs en texte clair à l’application.Next, the driver decrypts the results and returns plaintext values to the 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.A client driver interacts with a key store, containing a column master key, using a column master key store provider, which is a client-side software component that encapsulates a key store containing the column master key. Les fournisseurs des types courants de magasins de clés sont disponibles dans des bibliothèques de pilotes côté client chez Microsoft ou sous forme de téléchargements autonomes.Providers for common types of key stores are available in client-side driver libraries from Microsoft or as standalone downloads. Vous pouvez également implémenter votre propre fournisseur.You can also implement your own provider. 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.Always Encrypted capabilities, including built-in column master key store providers vary by a driver library and its version.

Pour plus d’informations sur le développement des applications à l’aide d’Always Encrypted avec des pilotes clients particuliers, consultez Développer des applications à l’aide d’Always Encrypted.For details of how to develop applications using Always Encrypted with particular client drivers, see Develop applications using Always Encrypted.

Notes Remarks

Le chiffrement et le déchiffrement sont effectués par le biais du pilote client.Encryption and decryption occurs via the client driver. Cela signifie que certaines actions qui se produisent uniquement côté serveur ne fonctionneront pas en utilisant Always Encrypted.This means that some actions that occur only server-side will not work when using Always Encrypted. Citons par exemple la copie de données d’une colonne vers une autre à l’aide d’une instruction UPDATE, BULK INSERT(T-SQL), SELECT INTO, INSERT..SELECT.Examples include copying data from one columng to another via an UPDATE, BULK INSERT(T-SQL), SELECT INTO, INSERT..SELECT.

Voici un exemple d’une instruction UPDATE qui tente de déplacer des données d’une colonne chiffrée vers une colonne non chiffrée sans retourner de jeu de résultats au client :Here's an example of an UPDATE that attempts to move data from an encrypted column to an unencrypted column without returning a result set to the client:

update dbo.Patients set testssn = SSN

Si SSN est une colonne chiffrée à l’aide d’Always Encrypted, l’instruction de mise à jour ci-dessus échoue avec une erreur similaire à :If SSN is a column encrypted using Always Encrypted, the above update statement will fail with an error similar to:

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

Pour mettre à jour correctement la colonne, effectuez les étapes suivantes :To successfully update the column, do the following:

  1. Sélectionnez les données de la colonne SSN et stockez-les comme jeu de résultats dans l’application.SELECT the data out of the SSN column, and store it as a result set in the application. Cela permettra à l’application (pilote client) de déchiffrer la colonne.This will allow for the application (client driver) to decrypt the column.
  2. Insérez les données du jeu de résultats dans SQL Server.INSERT the data from the result set into SQL Server.

Important

Dans ce scénario, les données sont non chiffrées quand elles sont renvoyées au serveur, car la colonne de destination est un type varchar standard qui n’accepte pas les données chiffrées.In this scenario, the data will be unencrypted when sent back to the server because the destination column is a regular varchar that does not accept encrypted data.

Sélection d’un chiffrement déterministe ou aléatoireSelecting Deterministic or Randomized Encryption

Le moteur de base de données n’opère jamais sur des données en texte clair stockées dans des colonnes chiffrées, mais il prend quand même en charge les requêtes sur des données chiffrées, en fonction du type de chiffrement de la colonne.The Database Engine never operates on plaintext data stored in encrypted columns, but it still supports some queries on encrypted data, depending on the encryption type for the column. Always Encrypted prend en charge deux types de chiffrement : le chiffrement aléatoire et le chiffrement déterministe.Always Encrypted supports two types of encryption: randomized encryption and deterministic encryption.

  • Le chiffrement déterministe génère toujours la même valeur chiffrée pour une valeur en texte clair donnée.Deterministic encryption always generates the same encrypted value for any given plain text value. Le chiffrement déterministe permet d’effectuer des recherches de point, des jointures d’égalité, ainsi que des regroupements et une indexation sur les colonnes chiffrées.Using deterministic encryption allows point lookups, equality joins, grouping and indexing on encrypted columns. Toutefois, il peut également permettre aux utilisateurs non autorisés de deviner des informations sur des valeurs chiffrées en examinant les modèles dans la colonne chiffrée, en particulier en cas de petit ensemble de valeurs chiffrées possibles, par exemple, Vrai/Faux ou la région Nord/Sud/Est/Ouest.However, it may also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column, especially if there's a small set of possible encrypted values, such as True/False, or North/South/East/West region. Le chiffrement déterministe doit utiliser un classement de colonne avec un ordre de tri binaire 2 pour les colonnes de type caractère.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

  • Le chiffrement aléatoire utilise une méthode qui chiffre les données de manière moins prévisible.Randomized encryption uses a method that encrypts data in a less predictable manner. Le chiffrement aléatoire est plus sécurisé, mais il empêche la recherche, le regroupement, l’indexation et la jointure sur des colonnes chiffrées.Randomized encryption is more secure, but prevents searching, grouping, indexing, and joining on encrypted columns.

Utilisez le chiffrement déterministe pour les colonnes que vous utilisez comme paramètres de recherche ou de regroupement.Use deterministic encryption for columns that will be used as search or grouping parameters. Par exemple, un numéro d’identité officiel.For example, a government ID number. Utilisez le chiffrement aléatoire pour des données (par exemple, des commentaires d’enquête confidentielle) qui ne sont pas regroupées avec d’autres enregistrements et ne sont pas utilisées pour joindre des tables.Use randomized encryption for data such as confidential investigation comments, which aren't grouped with other records and aren't used to join tables. Pour plus d’informations sur les algorithmes de chiffrement Always Encrypted, consultez Chiffrement Always Encrypted.For details on Always Encrypted cryptographic algorithms, see Always Encrypted cryptography.

Configuration d’Always EncryptedConfiguring Always Encrypted

L’installation initiale d’Always Encrypted dans une base de données implique la génération de clés Always Encrypted, la création de métadonnées de clé, la configuration des propriétés de chiffrement des colonnes de base de données sélectionnées et/ou le chiffrement des données qui existent déjà dans les colonnes qui doivent être chiffrées.The initial setup of Always Encrypted in a database involves generating Always Encrypted keys, creating key metadata, configuring encryption properties of selected database columns, and/or encrypting data that may already exist in columns that need to be encrypted. Notez que certaines de ces tâches ne sont pas prise en charge dans Transact-SQL et nécessitent l’utilisation d’outils côté client.Please note that some of these tasks are not supported in Transact-SQL and require the use of client-side tools. Les clés Always Encrypted et les données sensibles protégées n’étant jamais révélées en texte clair au serveur, le moteur de base de données ne peut pas participer au provisionnement des clés ni effectuer d’opérations de chiffrement ou de déchiffrement des données.As Always Encrypted keys and protected sensitive data are never revealed in plaintext to the server, the Database Engine can't be involved in key provisioning and perform data encryption or decryption operations. Vous pouvez utiliser SQL Server Management Studio ou PowerShell pour accomplir ces tâches.You can use SQL Server Management Studio or PowerShell to accomplish such tasks.

TâcheTask SSMSSSMS PowerShellPowerShell T-SQLT-SQL
Mise en service des clés principales de colonne, des clés de chiffrement de colonne et des clés de chiffrement de colonne chiffrées avec leurs clés principales de colonne correspondantesProvisioning column master keys, column encryption keys and encrypted column encryption keys with their corresponding column master keys. OuiYes OuiYes Non No
Création des métadonnées de clé dans la base de donnéesCreating key metadata in the database. OuiYes OuiYes OuiYes
Création de tables avec des colonnes chiffréesCreating new tables with encrypted columns OuiYes OuiYes OuiYes
Chiffrement de données existantes dans les colonnes de base de données sélectionnéesEncrypting existing data in selected database columns OuiYes OuiYes Non No

Notes

Always Encrypted avec enclaves sécurisées, introduit dans SQL Server 2019 (15.x)SQL Server 2019 (15.x), prend en charge le chiffrement des données existantes à l’aide de Transact-SQL.Always Encrypted with secure enclaves, introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x), does support encrypting existing data using Transact-SQL. Vous n’avez alors plus besoin de déplacer les données hors de la base de données pour les opérations de chiffrement.It also eliminates the need to move the data outside of the data for cryptographic operations.

Notes

Veillez à exécuter les outils de chiffrement de données ou de mise en service des clés dans un environnement sécurisé, sur un ordinateur différent de celui qui héberge votre base de données.Make sure you run key provisioning or data encryption tools in a secure environment, on a computer that is different from the computer hosting your database. Dans le cas contraire, il pourrait y avoir une fuite des données sensibles ou des clés dans l’environnement serveur, ce qui réduirait les avantages liés à l’utilisation d’Always Encrypted.Otherwise, sensitive data or the keys could leak to the server environment, which would reduce the benefits of the using Always Encrypted.

Pour plus d’informations sur la configuration d’Always Encrypted, consultez :For details on configuring Always Encrypted see:

Prise en main d’Always EncryptedGetting Started with Always Encrypted

Utilisez l’ Assistant Always Encrypted pour une prise en main rapide d’Always Encrypted.Use the Always Encrypted Wizard to quickly start using Always Encrypted. L’Assistant met en service les clés nécessaires et configure le chiffrement pour les colonnes sélectionnées.The wizard will provision the required keys and configure encryption for selected columns. Si les colonnes pour lesquelles vous définissez le chiffrement contiennent déjà des données, l’Assistant chiffre ces données.If the columns you're setting encryption for already contain some data, the wizard will encrypt the data. L’exemple suivant illustre le processus de chiffrement d’une colonne.The following example demonstrates the process for encrypting a column.

Notes

Pour visionner une vidéo qui inclut l’utilisation de l’Assistant, consultez Getting Started with Always Encrypted with SSMS(Prise en main d’Always Encrypted avec SSMS).For a video that includes using the wizard, see Getting Started with Always Encrypted with SSMS.

  1. Connectez-vous à une base de données qui contient des tables avec des colonnes que vous souhaitez chiffrer à l’aide de l’ Explorateur d’objets de Management Studio, ou créez une base de données, créez une ou plusieurs tables avec des colonnes à chiffrer et connectez-vous à cette base de données.Connect to an existing database that contains tables with columns you wish to encrypt using the Object Explorer of Management Studio, or create a new database, create one or more tables with columns to encrypt, and connect to it.
  2. Cliquez avec le bouton droit sur votre base de données, pointez sur Tâches, puis cliquez sur Chiffrer les colonnes pour ouvrir l’Assistant Always Encrypted.Right-click your database, point to Tasks, and then click Encrypt Columns to open the Always Encrypted Wizard.
  3. Examinez la page Introduction , puis cliquez sur Suivant.Review the Introduction page, and then click Next.
  4. Dans la page Sélectionner les colonnes , développez les tables et sélectionnez les colonnes que vous souhaitez chiffrer.On the Column Selection page, expand the tables, and select the columns that you want to encrypt.
  5. Pour chaque colonne sélectionnée pour le chiffrement, sélectionnez Déterministe ou Aléatoire comme Type de chiffrement.For each column selected for encryption, set the Encryption Type to either Deterministic or Randomized.
  6. Pour chaque colonne sélectionnée pour le chiffrement, sélectionnez une Clé de chiffrement.For each column selected for encryption, select an Encryption Key. Si vous n’avez encore jamais créé de clé de chiffrement pour cette base de données, sélectionnez l’option par défaut de génération automatique d’une nouvelle clé, puis cliquez sur Suivant.If you have not previously created any encryption keys for this database, select the default choice of a new autogenerated key, and then click Next.
  7. Dans la page Configuration de la clé principale , sélectionnez un emplacement pour stocker la nouvelle clé et une source de clé principale, puis cliquez sur Suivant.On the Master Key Configuration page, select a location to store the new key, and select a master key source, and then click Next.
  8. Dans la page Validation , indiquez si vous souhaitez exécuter le script immédiatement ou créer un script PowerShell, puis cliquez sur Suivant.On the Validation page, choose whether to run the script immediately or create a PowerShell script, and then click Next.
  9. Dans la page Récapitulatif, passez en revue les options que vous avez sélectionnées, puis cliquez sur Terminer.On the Summary page, review the options you've selected, and then click Finish. Fermez l’Assistant à la fin.Close the wizard when completed.

Détails sur les fonctionnalitésFeature Details

  • Les requêtes peuvent effectuer une comparaison d’égalité sur des colonnes chiffrées à l’aide du chiffrement déterministe, mais aucune autre opération (par exemple, comparaison de supériorité ou d’infériorité, correspondance de modèle à l’aide de l’opérateur LIKE ou opérations arithmétiques).Queries can perform equality comparison on columns encrypted using deterministic encryption, but no other operations (for example, greater/less than, pattern matching using the LIKE operator, or arithmetical operations).

  • Les requêtes sur les colonnes chiffrées à l’aide du chiffrement aléatoire ne peuvent pas effectuer d’opérations sur ces colonnes.Queries on columns encrypted by using randomized encryption can't perform operations on any of those columns. L’indexation des colonnes chiffrées à l’aide du chiffrement aléatoire n’est pas prise en charge.Indexing columns encrypted using randomized encryption isn't supported.

Notes

Always Encrypted avec enclaves sécurisées, introduit dans SQL Server 2019 (15.x)SQL Server 2019 (15.x), résout la limitation ci-dessus en activant des critères spéciaux, des opérateurs de comparaison et l’indexation sur les colonnes qui utilisent le chiffrement aléatoire.Always Encrypted with secure enclaves, introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x), addresses the above limitation by enabling pattern matching, comparison operators and indexing on columns using randomized encryption.

  • Une clé de chiffrement de colonne peut avoir jusqu’à deux valeurs chiffrées différentes, chacune chiffrée avec une clé principale de colonne différente.A column encryption key can have up to two different encrypted values, each encrypted with a different column master key. Cela facilite la permutation des clés principales de colonne.This facilitates column master key rotation.

  • Dans le chiffrement déterministe, une colonne doit avoir l’un des classements BIN2.Deterministic encryption requires a column to have one of the binary2 collations.

  • Après avoir modifié la définition d’un objet chiffré, exécutez sp_refresh_parameter_encryption pour mettre à jour les métadonnées Always Encrypted de l’objet.After changing the definition of an encrypted object, execute sp_refresh_parameter_encryption to update the Always Encrypted metadata for the object.

Always Encrypted n’est pas pris en charge pour les colonnes avec les caractéristiques ci-dessous.Always Encrypted isn't supported for the columns with the below characteristics. Par exemple, si l’une des conditions suivantes s’applique à la colonne, la clause ENCRYPTED WITH ne peut pas être utilisée dans CREATE TABLE/ALTER TABLE pour une colonne :For example, if any of the following conditions apply to the column, the ENCRYPTED WITH clause can't be used in CREATE TABLE/ALTER TABLE for a column:

  • Colonnes utilisant l’un des types de données suivants : xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, types définis par l’utilisateur.Columns using one of the following data types: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, user defined-types.
  • Colonnes FILESTREAMFILESTREAM columns
  • Colonnes avec la propriété IDENTITY.Columns with the IDENTITY property.
  • Colonnes avec la propriété ROWGUIDCOL.Columns with ROWGUIDCOL property.
  • Chaîne (varchar, char, etc.) avec des classements non-bin2.String (varchar, char, etc.) columns with non-bin2 collations.
  • Colonnes qui font office de clés pour les index non cluster utilisant une colonne chiffrée aléatoire comme colonne clé (les colonnes chiffrées déterministes conviennent).Columns that are keys for nonclustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine).
  • Colonnes qui font office de clés pour les index cluster utilisant une colonne chiffrée aléatoire comme colonne clé (les colonnes chiffrées déterministes conviennent).Columns that are keys for clustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine).
  • Colonnes qui font office de clés pour les index de texte intégral contenant des colonnes chiffrées aléatoires et déterministes.Columns that are keys for fulltext indices containing encrypted columns both randomized and deterministic.
  • Colonnes calculéesComputed columns.
  • Colonnes référencées par des colonnes calculées (quand l’expression effectue des opérations non prises en charge pour Always Encrypted).Columns referenced by computed columns (when the expression does unsupported operations for Always Encrypted).
  • Jeu de colonnes éparses.Sparse column set.
  • Colonnes référencées par des statistiques.Columns that are referenced by statistics.
  • Colonnes utilisant un type d’alias.Columns using alias type.
  • Colonnes de partitionnement.Partitioning columns.
  • Colonnes avec des contraintes par défaut.Columns with default constraints.
  • 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).Columns referenced by unique constraints when using randomized encryption (deterministic encryption is supported).
  • Colonnes de clé primaire en cas d’utilisation du chiffrement aléatoire (le chiffrement déterministe est pris en charge).Primary key columns when using randomized encryption (deterministic encryption is supported).
  • 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.Referencing columns in foreign key constraints when using randomized encryption or when using deterministic encryption, if the referenced and referencing columns use different keys or algorithms.
  • Colonnes référencées par des contraintes de validation.Columns referenced by check constraints.
  • Colonnes dans des tables qui utilisent la capture des changements de données.Columns in tables that use change data capture.
  • Colonnes de clé primaire sur des tables avec suivi des changements.Primary key columns on tables that have change tracking.
  • Colonnes masquées (à l’aide de Dynamic Data Masking).Columns that are masked (using Dynamic Data Masking).
  • Colonnes dans les tables Stretch Database.Columns in Stretch Database tables. (Les tables comportant des colonnes chiffrées avec Always Encrypted peuvent être activées pour l’extension.)(Tables with columns encrypted with Always Encrypted can be enabled for Stretch.)
  • 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).Columns in external (PolyBase) tables (note: using external tables and tables with encrypted columns in the same query is supported).
  • Les paramètres tabulaires ciblant des colonnes chiffrées ne sont pas pris en charge.Table-valued parameters targeting encrypted columns aren't supported.

Vous ne pouvez pas utiliser les clauses suivantes pour les colonnes chiffrées :The following clauses can't be used for encrypted columns:

  • FOR XML
  • FOR JSON PATH

Les fonctionnalités suivantes ne fonctionnent pas sur les colonnes chiffrées :The following features don't work on encrypted columns:

  • Réplication transactionnelle ou de fusionTransactional or merge replication
  • Requêtes distribuées (serveurs liés, OPENROWSET(T-SQL), OPENDATASOURCE(T-SQL))Distributed queries (linked servers, OPENROWSET(T-SQL), OPENDATASOURCE(T-SQL))

Spécifications des outilsTool Requirements

  • SQL Server Management Studio version 18 ou ultérieure est recommandé pour exécuter des requêtes qui déchiffrent les résultats récupérés dans les colonnes chiffrées ou qui insèrent, mettent à jour ou filtrent des colonnes chiffrées.SQL Server Management Studio version 18 or higher is recommended to run queries that decrypt the results retrieved from encrypted columns or insert, update, or filter encrypted columns.
  • Nécessite sqlcmd version 13.1 ou ultérieure, disponible dans le Centre de téléchargement.Requires sqlcmd version 13.1 or higher, which is available from the Download Center.

Autorisations de base de donnéesDatabase Permissions

Il existe quatre autorisations pour Always Encrypted :There are four permissions for Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY (Obligatoire pour créer et supprimer une clé principale de colonne.)ALTER ANY COLUMN MASTER KEY (Required to create and delete a column master key.)

  • ALTER ANY COLUMN ENCRYPTION KEY (Obligatoire pour créer et supprimer une clé de chiffrement de colonne.)ALTER ANY COLUMN ENCRYPTION KEY (Required to create and delete a column encryption key.)

  • VIEW ANY COLUMN MASTER KEY DEFINITION (Obligatoire pour accéder et lire les métadonnées des clés principales de colonne pour gérer les clés ou interroger des colonnes chiffrées.)VIEW ANY COLUMN MASTER KEY DEFINITION (Required to access and read the metadata of the column master keys to manage keys or query encrypted columns.)

  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Obligatoire pour accéder et lire les métadonnées de la clé de chiffrement de colonne pour gérer les clés ou interroger des colonnes chiffrées.)VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Required to access and read the metadata of the column encryption key to manage keys or query encrypted columns.)

Le tableau suivant récapitule les autorisations nécessaires pour effectuer des actions courantes.The following table summarizes the permissions required for common actions.

ScénarioScenario ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
Gestion de clés (création/modification/examen des métadonnées de clé dans la base de données)Key management (creating/changing/reviewing key metadata in the database) XX XX XX XX
Interrogation de colonnes chiffréesQuerying encrypted columns XX XX

Remarques importantes :Important notes:

  • Les autorisations s’appliquent aux actions à l’aide de Transact-SQLTransact-SQL, Management StudioManagement Studio (boîtes de dialogue et Assistant) ou de PowerShell.The permissions apply to actions using Transact-SQLTransact-SQL, Management StudioManagement Studio (dialog boxes and wizard), or PowerShell.

  • Les deux autorisations VIEW sont obligatoires quand l’utilisateur sélectionne des colonnes chiffrées, même s’il n’est pas autorisé à déchiffrer les colonnes.The two VIEW permissions are required when selecting encrypted columns, even if the user doesn't have permission to decrypt the columns.

  • Dans SQL ServerSQL Server, les deux autorisations VIEW sont accordées par défaut au rôle de base de données fixe public .In SQL ServerSQL Server, both VIEW permissions are granted by default to the public fixed database role. Un administrateur de base de données peut choisir de révoquer (ou refuser) les autorisations VIEW pour le rôle public , et de les accorder à des rôles ou des utilisateurs spécifiques pour implémenter un contrôle plus restreint.A database administrator may choose to revoke (or deny) the VIEW permissions to the public role and grant them to specific roles or users to implement more restricted control.

  • Dans SQL DatabaseSQL Database, les autorisations VIEW ne sont pas accordées par défaut au rôle de base de données fixe public.In SQL DatabaseSQL Database, the VIEW permissions aren't granted by default to the public fixed database role. Cela permet à certains outils hérités (utilisant des versions antérieures de DacFx) de fonctionner correctement.This enables certain existing, legacy tools (using older versions of DacFx) to work properly. Ainsi, pour travailler avec des colonnes chiffrées (même si vous ne les déchiffrez pas), un administrateur de base de données doit accorder explicitement les deux autorisations VIEW .Consequently, to work with encrypted columns (even if not decrypting them) a database administrator must explicitly grant the two VIEW permissions.

 ExempleExample

Le code Transact-SQLTransact-SQL suivant crée des métadonnées de clé principale de colonne, des métadonnées de clé de chiffrement de colonne et une table comportant des colonnes chiffrées.The following Transact-SQLTransact-SQL creates column master key metadata, column encryption key metadata, and a table with encrypted columns. Pour plus d’informations sur la façon de créer les clés référencées dans les métadonnées, consultez :For information how to create the keys, referenced in the metadata, see:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
   );  
---------------------------------------------  
CREATE COLUMN ENCRYPTION KEY MyCEK   
WITH VALUES  
(  
    COLUMN_MASTER_KEY = MyCMK,   
    ALGORITHM = 'RSA_OAEP',   
    ENCRYPTED_VALUE = 0x01700000016C006F00630061006C006D0061006300680069006E0065002F006D0079002F003200660061006600640038003100320031003400340034006500620031006100320065003000360039003300340038006100350064003400300032003300380065006600620063006300610031006300284FC4316518CF3328A6D9304F65DD2CE387B79D95D077B4156E9ED8683FC0E09FA848275C685373228762B02DF2522AFF6D661782607B4A2275F2F922A5324B392C9D498E4ECFC61B79F0553EE8FB2E5A8635C4DBC0224D5A7F1B136C182DCDE32A00451F1A7AC6B4492067FD0FAC7D3D6F4AB7FC0E86614455DBB2AB37013E0A5B8B5089B180CA36D8B06CDB15E95A7D06E25AACB645D42C85B0B7EA2962BD3080B9A7CDB805C6279FE7DD6941E7EA4C2139E0D4101D8D7891076E70D433A214E82D9030CF1F40C503103075DEEB3D64537D15D244F503C2750CF940B71967F51095BFA51A85D2F764C78704CAB6F015EA87753355367C5C9F66E465C0C66BADEDFDF76FB7E5C21A0D89A2FCCA8595471F8918B1387E055FA0B816E74201CD5C50129D29C015895CD073925B6EA87CAF4A4FAF018C06A3856F5DFB724F42807543F777D82B809232B465D983E6F19DFB572BEA7B61C50154605452A891190FB5A0C4E464862CF5EFAD5E7D91F7D65AA1A78F688E69A1EB098AB42E95C674E234173CD7E0925541AD5AE7CED9A3D12FDFE6EB8EA4F8AAD2629D4F5A18BA3DDCC9CF7F352A892D4BEBDC4A1303F9C683DACD51A237E34B045EBE579A381E26B40DCFBF49EFFA6F65D17F37C6DBA54AA99A65D5573D4EB5BA038E024910A4D36B79A1D4E3C70349DADFF08FD8B4DEE77FDB57F01CB276ED5E676F1EC973154F86  
);  
---------------------------------------------  
CREATE TABLE Customers (  
    CustName nvarchar(60)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = RANDOMIZED,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    SSN varchar(11)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = DETERMINISTIC ,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    Age int NULL  
);  
GO  
  

 Voir aussiSee Also