Always Encrypted avec enclaves sécuriséesAlways Encrypted with Secure Enclaves

CETTE RUBRIQUE S’APPLIQUE À : ouiSQL Server nonAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Always Encrypted avec enclaves sécurisées fournit des fonctionnalités supplémentaires à la fonction Always Encrypted.Always Encrypted with secure enclaves provides additional functionality to the Always Encrypted feature.

Introduit dans SQL Server 2016, Always Encrypted protège la confidentialité des données sensibles contre les programmes malveillants et les utilisateurs non autorisés à privilèges élevés de SQL Server.Introduced in SQL Server 2016, Always Encrypted protects the confidentiality of sensitive data from malware and high-privileged unauthorized users of SQL Server. Les utilisateurs non autorisés à privilèges élevés sont les administrateurs de bases de données (DBA), les administrateurs d’ordinateurs, les administrateurs de cloud ou toute autre personne qui a un accès légitime aux instances de serveur, au matériel, etc., mais ne devant pas avoir accès à tout ou partie des données réelles.High-privileged unauthorized users are DBAs, computer admins, cloud admins, or anyone else who has legitimate access to server instances, hardware, etc., but who should not have access to some or all of the actual data.

Jusqu’à présent, Always Encrypted protégeait les données en les chiffrant côté client et en n’autorisant jamais les données ou les clés de chiffrement correspondantes à s’afficher en texte clair dans le moteur SQL Server.Until now, Always Encrypted protected the data by encrypting it on the client side and never allowing the data or the corresponding cryptographic keys to appear in plaintext inside the SQL Server Engine. Par conséquent, la fonctionnalité sur des colonnes chiffrées à l’intérieur de la base de données était extrêmement limitée.As a result, the functionality on encrypted columns inside the database was severely restricted. Les seules opérations que SQL Server pouvait effectuer sur des données chiffrées étaient les comparaisons d’égalité (et les comparaisons d’égalité n’étaient disponibles qu’avec le chiffrement déterministe).The only operations SQL Server could perform on encrypted data were equality comparisons (and equality comparisons were only available with deterministic encryption). Toutes les autres opérations, notamment les opérations de chiffrement (chiffrement des données initiales ou rotation de clé) ou les calculs riches (par exemple, les critères spéciaux), n’étaient pas prises en charge à l’intérieur de la base de données.All other operations, including cryptographic operations (initial data encryption or key rotation), or rich computations (for example, pattern matching) were not supported inside the database. Les utilisateurs devaient déplacer les données en dehors de la base de données pour effectuer ces opérations côté client.Users needed to move the data outside of the database to perform these operations on the client-side.

Always Encrypted avec enclaves sécurisées résout ces limitations en autorisant les calculs sur les données de texte en clair à l’intérieur d’une enclave sécurisée côté serveur.Always Encrypted with secure enclaves addresses these limitations by allowing computations on plaintext data inside a secure enclave on the server side. Une enclave sécurisée est une région de mémoire protégée dans le processus SQL Server qui agit comme un environnement d’exécution approuvé pour le traitement des données sensibles dans le moteur SQL Server.A secure enclave is a protected region of memory within the SQL Server process, and acts as a trusted execution environment for processing sensitive data inside the SQL Server engine. Une enclave sécurisée apparaît sous la forme d’une boîte noire pour le reste de SQL Server et des autres processus sur l’ordinateur d’hébergement.A secure enclave appears as a black box to the rest of the SQL Server and other processes on the hosting machine. Il n’existe aucun moyen d’afficher les données ou le code à l’intérieur de l’enclave depuis l’extérieur, même avec un débogueur.There is no way to view any data or code inside the enclave from the outside, even with a debugger.

Always Encrypted utilise des enclaves sécurisées, comme illustré dans le diagramme suivant :Always Encrypted uses secure enclaves as illustrated in the following diagram:

flux de données

Lors de l’analyse de la requête d’une application, le moteur SQL Server détermine si la requête contient des opérations sur les données chiffrées qui nécessitent l’utilisation de l’enclave sécurisée.When parsing an application's query, the SQL Server Engine determines if the query contains any operations on encrypted data that require the use of the secure enclave. Pour les requêtes où l’enclave sécurisée doit être accessible :For queries where the secure enclave needs to be accessed:

  • Le pilote client envoie les clés de chiffrement de colonne requises pour les opérations à l’enclave sécurisée (via un canal sécurisé).The client driver sends the column encryption keys required for the operations to the secure enclave (over a secure channel).
  • Ensuite, le pilote client soumet la requête pour exécution, ainsi que les paramètres de la requête chiffrée.Then, the client driver submits the query for execution along with the encrypted query parameters.

Pendant le traitement de la requête, les données ou les clés de chiffrement de colonne ne sont pas exposées en texte clair dans le moteur SQL Server en dehors de l’enclave sécurisée.During query processing, the data or the column encryption keys are not exposed in plaintext in the SQL Server Engine outside of the secure enclave. Le moteur SQL Server délègue les opérations de chiffrement et les calculs sur les colonnes chiffrées à l’enclave sécurisée.The SQL Server Engine delegates cryptographic operations and computations on encrypted columns to the secure enclave. Si nécessaire, l’enclave sécurisée déchiffre les paramètres de la requête et/ou les données stockées dans les colonnes chiffrées et effectue les opérations demandées.If needed, the secure enclave decrypts the query parameters and/or the data stored in encrypted columns and performs the requested operations.

Pourquoi utiliser Always Encrypted avec enclaves sécurisées ?Why use Always Encrypted with secure enclaves?

Avec les enclaves sécurisées, Always Encrypted protège la confidentialité des données sensibles, tout en offrant les avantages suivants :With secure enclaves, Always Encrypted protects the confidentiality of sensitive data while providing the following benefits:

  • Chiffrement sur place : les opérations de chiffrement des données sensibles (par exemple, le chiffrement des données initiales ou la permutation d’une clé de chiffrement de colonne) sont effectuées à l’intérieur de l’enclave sécurisée et ne nécessitent pas le déplacement des données en dehors de la base de données.In-place encryption - cryptographic operations on sensitive data, for example: initial data encryption or rotating a column encryption key, are performed inside the secure enclave and do not require moving the data outside of the database. Vous pouvez émettre le chiffrement sur place à l’aide de l’instruction Transact-SQL ALTER TABLE, et vous n’avez pas besoin d’utiliser des outils, comme l’Assistant Always Encrypted dans SSMS ou la cmdlet PowerShell Set-SqlColumnEncryption.You can issue in-place encryption using the ALTER TABLE Transact-SQL statement, and you do not need to use tools, such as the Always Encrypted wizard in SSMS or the Set-SqlColumnEncryption PowerShell cmdlet.

  • Calculs riches (préversion)  : les opérations sur des colonnes chiffrées, notamment les critères spéciaux (prédicat LIKE) et les comparaisons de plages, sont prises en charge à l’intérieur de l’enclave sécurisée, ce qui rend Always Encrypted accessible à une large gamme d’applications et de scénarios qui requièrent que ces calculs s’effectuent dans le système de base de données.Rich computations (preview) - operations on encrypted columns, including pattern matching (the LIKE predicate) and range comparisons, are supported inside the secure enclave, which unlocks Always Encrypted to a broad range of applications and scenarios that require such computations to be performed inside the database system.

Important

Dans SQL Server 2019SQL Server 2019, les calculs avancés sont des optimisations de performances et des améliorations de gestion des erreurs en attente. Ils sont actuellement désactivés par défaut.In SQL Server 2019SQL Server 2019, rich computations are pending several performance optimizations and error-handling enhancements, and are currently disabled by default. Pour activer les calculs riches, consultez Activer les calculs riches.To enable rich computations, see Enable rich computations.

Dans SQL Server 2019SQL Server 2019, Always Encrypted avec enclaves sécurisées utilise des enclaves mémoire sécurisées de sécurité basée sur la virtualisation (VBS), également appelées mode sécurisé virtuel ou enclaves VSM, dans Windows.In SQL Server 2019SQL Server 2019, Always Encrypted with secure enclaves uses Virtualization-based Security (VBS) secure memory enclaves (also known as Virtual Secure Mode, or VSM enclaves) in Windows.

Attestation d’enclave sécuriséeSecure Enclave Attestation

L’enclave sécurisée à l’intérieur du moteur SQL Server peut accéder aux données sensibles stockées dans les colonnes de base de données chiffrées et les clés de chiffrement de colonne correspondantes en texte en clair.The secure enclave inside the SQL Server Engine can access sensitive data stored in encrypted database columns and the corresponding column encryption keys in plaintext. Avant de soumettre une requête qui implique des calculs d’enclave à SQL Server, le pilote client à l’intérieur de l’application doit vérifier que l’enclave sécurisée est une enclave authentique basée sur une technologie donnée (par exemple, VBS) et que le code s’exécutant à l’intérieur de l’enclave a été signé pour s’exécuter à l’intérieur de l’enclave.Before submitting a query that involves enclave computations to SQL Server, the client driver inside the application must verify the secure enclave is a genuine enclave based on a given technology (for example, VBS) and the code running inside the enclave has been signed for running inside the enclave.

Le processus de vérification de l’enclave est appelé attestation d’enclave et implique généralement un pilote client au sein de l’application ainsi que la prise de contact de SQL Server avec un service d’attestation externe.The process of verifying the enclave is called enclave attestation, and it usually involves both a client driver within the application and SQL Server contacting an external attestation service. Les détails du processus d’attestation dépendent de la technologie de l’enclave et du service d’attestation.The specifics of the attestation process depend on the enclave technology and the attestation service.

Le processus d’attestation pris en charge par SQL Server pour les enclaves sécurisées VBS dans SQL Server 2019SQL Server 2019 est l’attestation de runtime Windows Defender System Guard, qui utilise le service HGS (Host Guardian Service) comme service d’attestation.The attestation process SQL Server supports for VBS secure enclaves in SQL Server 2019SQL Server 2019 is Windows Defender System Guard runtime attestation, which uses Host Guardian Service (HGS) as an attestation service. Vous devez configurer SGH dans votre environnement et inscrire l’ordinateur qui héberge votre instance SQL Server dans SGH.You need to configure HGS in your environment and register the machine hosting your SQL Server instance in HGS. Vous devez également configurer vos outils ou applications client (par exemple, SQL Server Management Studio) avec une attestation SGH.You also must configure you client applications or tools (for example, SQL Server Management Studio) with an HGS attestation.

Fournisseurs d’enclave sécuriséeSecure Enclave Providers

Pour utiliser Always Encrypted avec enclaves sécurisées, une application doit utiliser un pilote client qui prend en charge la fonctionnalité.To use Always Encrypted with secure enclaves, an application must use a client driver that supports the feature. Dans SQL Server 2019SQL Server 2019, vos applications doivent utiliser .NET Framework 4.7.2 et le fournisseur de données .NET Framework pour SQL Server.In SQL Server 2019SQL Server 2019, your applications must use .NET Framework 4.7.2 and .NET Framework Data Provider for SQL Server. En outre, les applications .NET doivent être configurées avec un fournisseur d’enclave sécurisée spécifique au type de l’enclave (par exemple, VBS) et au service d’attestation (par exemple, SGH), que vous utilisez.In addition, .NET applications must be configured with a secure enclave provider specific to the enclave type (for example, VBS) and the attestation service (for example, HGS), you are using. Les fournisseurs d’enclave pris en charge sont expédiés séparément dans un package NuGet, que vous devez intégrer à votre application.The supported enclave providers are shipped separately in a NuGet package, which you need to integrate with your application. Un fournisseur d’enclave implémente la logique côté client pour le protocole d’attestation et pour établir un canal sécurisé avec une enclave sécurisée d’un type donné.An enclave provider implements the client-side logic for the attestation protocol and for establishing a secure channel with a secure enclave of a given type.

Clés prenant en charge l’enclaveEnclave-enabled Keys

Always Encrypted avec enclaves sécurisées introduit le concept des clés prenant en charge l’enclave :Always Encrypted with secure enclaves introduces the concept of enclave-enabled keys:

  • Clé principale de colonne prenant en charge l’enclave : clé principale de colonne qui possède la propriété ENCLAVE_COMPUTATIONS spécifiée dans l’objet de métadonnées de la clé principale de colonne à l’intérieur de la base de données.Enclave-enabled column master key - a column master key that has the ENCLAVE_COMPUTATIONS property specified in the column master key metadata object inside the database. L’objet de métadonnées de la clé principale de colonne doit également contenir une signature valide des propriétés des métadonnées.The column master key metadata object must also contain a valid signature of the metadata properties.
  • Clé de chiffrement de colonne prenant en charge l’enclave : clé de chiffrement de colonne qui est chiffrée avec une clé principale de colonne prenant en charge l’enclave.Enclave-enabled column encryption key - a column encryption key that is encrypted with an enclave-enabled column master key.

Lorsque le moteur SQL Server détermine les opérations, spécifiées dans une requête, qui doivent être effectuées à l’intérieur de l’enclave sécurisée, le moteur SQL Server demande que le pilote client partage les clés de chiffrement de colonne qui sont nécessaires pour les calculs avec l’enclave sécurisée.When the SQL Server Engine determines operations, specified in a query, need to be performed inside the secure enclave, the SQL Server Engine requests the client driver shares the column encryption keys that are needed for the computations with the secure enclave. Le pilote client partage les clés de chiffrement de colonne uniquement si les clés prennent en charge l’enclave (c’est-à-dire qu’elles sont chiffrées avec des clés principales de colonne prenant en charge l’enclave) et qu’elles sont correctement signées.The client driver shares the column encryption keys only if the keys are enclave-enabled (that is, encrypted with enclave-enabled column master keys) and they're properly signed. Sinon, la requête échoue.Otherwise, the query fails.

Colonnes prenant en charge l’enclaveEnclave-enabled Columns

Une colonne prenant en charge l’enclave est une colonne de base de données qui est chiffrée avec une clé de chiffrement de colonne prenant en charge l’enclave.An enclave-enabled column is a database column encrypted with an enclave-enabled column encryption key. La fonctionnalité disponible pour une colonne prenant en charge l’enclave varie selon le type de chiffrement que la colonne utilise.The functionality available for an enclave-enabled column depends on the encryption type the column is using.

  • Chiffrement déterministe : les colonnes prenant en charge l’enclave utilisant le chiffrement déterministe prennent en charge le chiffrement sur place, mais aucune autre opération à l’intérieur de l’enclave sécurisée.Deterministic encryption - Enclave-enabled columns using deterministic encryption support in-place encryption, but no other operations inside the secure enclave. La comparaison d’égalité est prise en charge, mais effectuée en comparant le texte chiffré en dehors de l’enclave.Equality comparison is supported, but it is performed by comparing the ciphertext outside of the enclave.
  • Chiffrement aléatoire : les colonnes prenant en charge l’enclave utilisant le chiffrement aléatoire prennent en charge le chiffrement sur place, ainsi que les calculs riches à l’intérieur de l’enclave sécurisée.Randomized encryption - Enclave-enabled columns using randomized encryption support in-place encryption as well as rich computations inside the secure enclave. Les calculs riches pris en charge sont les critères spéciaux et les opérateurs de comparaison, notamment la comparaison d’égalité.The supported rich computations are pattern matching and comparison operators, including equality comparison.

Pour plus d’informations sur les types de chiffrement, consultez Chiffrement Always Encrypted.For more information about encryption types, see Always Encrypted Cryptography.

Le tableau suivant récapitule les fonctionnalités disponibles pour les colonnes chiffrées, selon que les colonnes utilisent des clés de chiffrement de colonne prenant en charge l’enclave et un type de chiffrement.The following table summarizes the functionality available for encrypted columns, depending on whether the columns use enclave-enabled column encryption keys and an encryption type.

OpérationOperation La colonne ne prend PAS en charge l’enclaveColumn is NOT enclave-enabled La colonne ne prend PAS en charge l’enclaveColumn is NOT enclave-enabled La colonne prend en charge l’enclaveColumn is enclave-enabled La colonne prend en charge l’enclaveColumn is enclave-enabled
Chiffrement aléatoireRandomized encryption Chiffrement déterministeDeterministic encryption Chiffrement aléatoireRandomized encryption Chiffrement déterministeDeterministic encryption
Chiffrement sur placeIn-place encryption Non pris en chargeNot Supported Non pris en chargeNot Supported Pris en chargeSupported Pris en chargeSupported
Comparaison d’égalitéEquality comparison Non pris en chargeNot Supported Pris en charge en dehors de l’enclaveSupported outside of the enclave Pris en charge (à l’intérieur de l’enclave)Supported (inside the enclave) Pris en charge en dehors de l’enclaveSupported outside of the enclave
Opérateurs de comparaison au-delà de l’égalitéComparison operators beyond equality Non pris en chargeNot Supported Non pris en chargeNot Supported Pris en chargeSupported Non pris en chargeNot Supported
LIKELIKE Non pris en chargeNot Supported Non pris en chargeNot Supported Pris en chargeSupported Non pris en chargeNot Supported

Le chiffrement sur place inclut la prise en charge des opérations suivantes à l’intérieur de l’enclave :In-place encryption includes support for the following operations inside the enclave:

  • Chiffrement initial des données stockées dans une colonne existante.Initial encryption of data stored in an existing column.

  • Nouveau chiffrement des données existantes dans une colonne, par exemple :Re-encrypting existing data in a column, for example:

    • Permutation de la clé de chiffrement de colonne (nouveau chiffrement la colonne avec une nouvelle clé).Rotating the column encryption key (re-encrypting the column with a new key).
    • Modification du type de chiffrement.Changing the encryption type.
  • Déchiffrement des données stockées dans une colonne chiffrée (conversion de la colonne en une colonne de texte en clair).Decrypting data stored in an encrypted column (converting the column into a plaintext column).

Pour que le chiffrement sur place soit possible, la clé (ou les clés) de chiffrement de colonne impliquée dans les opérations de chiffrement, doit prendre en charge l’enclave :For in-place encryption to be possible, the column encryption key (or keys), involved in the cryptographic operations, must be enclave-enabled:

  • Chiffrement initial : la clé de chiffrement de colonne pour la colonne en cours de chiffrement doit prendre en charge l’enclave.Initial encryption: the column encryption key for the column being encrypted must be enclave-enabled.
  • Nouveau chiffrement : la clé de chiffrement de colonne actuelle et cible (si différente de la clé actuelle) doivent prendre en charge l’enclave.Re-encryption: both the current and the target column encryption key (if different than the current key) must be enclave-enabled.
  • Déchiffrement : la clé de chiffrement de colonne actuelle de la colonne doit prendre en charge l’enclave.Decryption: the current column encryption key of the column must be enclave-enabled.

Index sur des colonnes prenant en charge les enclaves à l’aide d’un chiffrement aléatoireIndexes on Enclave-enabled Columns using Randomized Encryption

Vous pouvez créer des index non cluster sur des colonnes prenant en charge les enclaves à l’aide d’un chiffrement aléatoire pour accélérer l’exécution de requêtes enrichies.You can create nonclustered indexes on enclave-enabled columns using randomized encryption to make rich queries run faster. Pour garantir qu’un index sur une colonne chiffrée à l’aide d’un chiffrement aléatoire n’entraîne pas la fuite de données sensibles tout en étant utile pour le traitement des requêtes au sein de l’enclave, les valeurs de clés dans la structure des données d’index (B-tree) sont chiffrées et triées en fonction de leur valeurs de texte en clair.To ensure an index on a column encrypted using randomized encryption doesn't leak sensitive data and, at the same time, it's useful for processing queries inside the enclave, the key values in the index data structure (B-tree) are encrypted and sorted based on their plaintext values. Lorsque l’exécuteur de requête dans le moteur SQL Server utilise un index sur une colonne chiffrée pour effectuer des calculs au sein d’une enclave, il parcourt l’index pour rechercher des valeurs spécifiques stockées dans la colonne.When the query executor in the SQL Server Engine uses an index on an encrypted column for computations inside the enclave, it searches the index to look up specific values stored in the column. Chaque recherche peut impliquer plusieurs comparaisons.Each search may involve multiple comparisons. L’exécuteur de requête délègue chaque comparaison à l’enclave, qui déchiffre une valeur stockée dans la colonne et la valeur de clé de l’index chiffré à comparer, il effectue la comparaison sur du texte en clair et retourne le résultat de la comparaison à l’exécuteur.The query executor delegates each comparison to the enclave, which decrypts a value stored in the column and the encrypted index key value to be compared, it performs the comparison on plaintext and it returns the result of the comparison to the executor. Pour des informations générales, non spécifiques à Always Encrypted, sur la façon dont fonctionne l’indexation dans SQL Server, consultez Description des index en cluster non cluster.For general information, not specific to Always Encrypted, on how indexing in SQL Server works, see Clustered and Nonclustered Indexes Described.

Car un index sur une colonne prenant en charge les enclaves à l’aide d’un chiffrement aléatoire stocke les valeurs de clés d’index chiffrées tandis que les valeurs sont triées en fonction du texte en clair, le moteur SQL Server doit utiliser l’enclave pour toute opération qui implique la création ou la mise à jour d’un index, y compris :Because an index on an enclave-enabled column using randomized encryption stores the encrypted index key values while the values are sorted based on plaintext, SQL Server Engine must use the enclave for any operation that involves creating or updating an index, including:

  • Création ou régénération d'un index.Creating or rebuilding an index.
  • Insertion, mise à jour ou suppression d’une ligne dans la table (contenant une colonne indexée/chiffrée), ce qui déclenche l’insertion ou / et la suppression d’une clé d’index vers/à partir de l’index.Inserting, updating, or deleting a row in the table (containing an indexed/encrypted column), which triggers inserting or/and removing an index key to/from the index.
  • Exécution des commandes DBCC qui impliquent la vérification de l’intégrité des index, par exemple DBCC CHECKDB (Transact-SQL) ou DBCC CHECKTABLE (Transact-SQL).Running DBCC commands that involve checking the integrity of indexes, for example DBCC CHECKDB (Transact-SQL) or DBCC CHECKTABLE (Transact-SQL).
  • Récupération de base de données (par exemple, après échec et redémarrage de SQL Server), si SQL Server doit annuler les modifications apportées à l’index (voir ci-dessous).Database recovery (for example, after SQL Server fails and restarts), if SQL Server needs to undo any changes to the index (see more details below).

Toutes les opérations ci-dessus requièrent que l’enclave ait la clé de chiffrement de colonne pour la colonne indexée, afin qu’elle puisse déchiffrer les clés d’index.All the above operations require the enclave has the column encryption key for the indexed column, so that it can decrypt the index keys. En règle générale, l’enclave peut obtenir une clé de chiffrement de colonne dans une des deux façons suivantes :In general, the enclave can obtain a column encryption key in one of two ways:

  • Directement à partir de l’application cliente qui a appelé l’opération sur l’index, conformément à la description dans l’introduction ci-dessus.Directly from the client application that invoked the operation on the index, as described in the introduction above. Cette méthode requiert que l’application ou l’utilisateur aient accès à la clé principale de colonne et à la clé de chiffrement de colonne, qui protègent la colonne indexée.This method requires the application or the user to have access to the column master key and the column encryption key, protecting the indexed column. L’application doit se connecter à la base de données avec Always Encrypted activé pour la connexion.The application must connect to the database with Always Encrypted enabled for the connection.
  • À partir du cache de clés de chiffrement de colonne.From the cache of column encryption keys. L’enclave stocke les clés utilisées dans les requêtes précédentes dans le cache qui se trouve au sein de l’enclave et n’est donc pas accessible depuis l’extérieur.The enclave stores the keys, used in previous queries, in the cache that is located inside the enclave, and is therefore inaccessible from the outside. Si une application déclenche une opération sur un index sans fournir directement la clé de chiffrement de colonne requise, l’enclave recherche la clé dans le cache.If an application triggers an operation on an index without providing the required column encryption key directly, the enclave looks up the key in the cache. Si l’enclave trouve la clé dans le cache, elle l’utilise pour l’opération.If the enclave finds the key in the cache, it uses it for the operation. Cette méthode permet aux administrateurs de bases de données de gérer les index et d’effectuer certaines opérations de nettoyage des données (par exemple, la suppression d’une ligne d’une table contenant un index sur une colonne chiffrée) sans avoir accès aux clés de chiffrement ou aux données en texte clair.This method allows DBAs to manage indexes and perform certain data cleansing operations (for example, removing a row from a table containing an index on an encrypted column), without having access to the cryptographic keys or the data in plaintext. Elle requiert la connexion de l’application à la base de données sans qu’Always Encrypted soit activé pour la connexion.This method requires the application connects to the database without Always Encrypted enabled for the connection.

La création d’index sur des colonnes qui utilisent le chiffrement aléatoire et ne prennent pas en charge les enclaves n’est toujours pas prise en charge.Creating indexes on columns that use randomized encryption and are not enclave-enabled remains unsupported.

Récupération de base de donnéesDatabase Recovery

Si une instance de SQL Server échoue, ses bases de données peuvent être laissées dans un état où les fichiers de données peuvent contenir des modifications résultant de transactions incomplètes.If an instance of SQL Server fails, its databases may be left in a state where the data files may contain some modifications from incomplete transactions. Lorsque l’instance est démarrée, elle exécute un processus appelé récupération de base de données, qui implique la restauration de chaque transaction incomplète trouvée dans le journal des transactions pour garantir que l’intégrité de la base de données est préservée.When the instance is started, it runs a process called database recovery, which involves rolling back every incomplete transaction found in the transaction log to make sure the integrity of the database is preserved. Si une transaction incomplète a apporté des modifications à un index, ces modifications doivent également être annulées.If an incomplete transaction made any changes to an index, those changes also need to be undone. Par exemple, certaines valeurs de clés dans l’index peuvent devoir être supprimées ou réinsérées.For example, some key values in the index may need to be removed or reinserted.

Important

Microsoft recommande fortement d'activer la Récupération de base de données accélérée (ADR) pour votre base de données avant de créer le premier index sur une colonne prenant en charge les enclaves avec un chiffrement aléatoire.Microsoft strongly recommends enabling Accelerated database recovery (ADR) for your database, before creating the first index on an enclave-enabled column encrypted with randomized encryption.

Avec le processus de récupération de base de données traditionnel (qui suit le modèle de récupération ARIES), pour annuler une modification apportée à un index, SQL Server doit attendre qu’une application fournisse la clé de chiffrement de colonne pour la colonne de l’enclave, ce qui peut prendre un certain temps.With the traditional database recovery process (that follows the ARIES recovery model), to undo a change to an index, SQL Server needs to wait until an application provides the column encryption key for the column to the enclave, which can take a long time. L’ADR réduit notablement le nombre d’opérations d’annulation qui doivent être reportées parce qu’une clé de chiffrement de colonne n’est pas disponible dans le cache au sein de l’enclave.ADR dramatically reduces the number of undo operations that must be deferred because a column encryption key is not available in the cache inside the enclave. Par conséquent, elle augmente sensiblement la disponibilité de la base de données en réduisant au minimum le risque de blocage d’une nouvelle transaction.Consequently, it substantially increases the database availability by minimizing a chance for a new transaction to get blocked. Avec ADR activée, SQL Server peut toujours avoir besoin d’une clé de chiffrement de colonne pour effectuer le nettoyage d’anciennes versions de données. Cependant, cette tâche d’arrière-plan n’affecte pas la disponibilité des transactions de la base de données ou des utilisateurs.With ADR enabled, SQL Server still may need a column encryption key to complete cleaning up old data versions but it does that as a background task that does not impact the availability of the database or user transactions. Toutefois, vous pouvez voir les messages d’erreur dans le journal des erreurs, qui indiquent des opérations de nettoyage ayant échoué parce qu’il manquait une clé de chiffrement de colonne.You may, however, see error messages in the error log, indicating failed cleanup operations due to a missing column encryption key.

Index sur des colonnes prenant en charge les enclaves à l’aide d’un chiffrement déterministeIndexes on Enclave-enabled Columns using Deterministic Encryption

Un index sur une colonne utilisant un chiffrement déterministe est trié en fonction du texte chiffré (pas du texte en clair), que la colonne prenne ou non en charge les enclaves.An index on a column using deterministic encryption are sorted based on ciphertext (not plaintext), regardless if the column is enclave-enabled or not.

Considérations relatives à la sécuritéSecurity Considerations

Les considérations de sécurité suivantes s’appliquent à Always Encrypted avec enclaves sécurisés.The following security considerations apply to Always Encrypted with secure enclaves.

  • La sécurité de vos données au sein de l’enclave dépend d’un protocole et d’un service d’attestation.The security of your data inside the enclave depends on an attestation protocol and an attestation service. Par conséquent, vous devrez vérifier que le service et les stratégies d’attestation mis en œuvre par le service d’attestation sont bien gérés par un administrateur approuvé.Therefore, you need to ensure the attestation service and attestation policies, the attestation service enforces, are managed by a trusted administrator. De plus, les services d’attestation prennent généralement en charge des stratégies et des protocoles d’attestation différents, dont certains procèdent à une vérification minimale de l’enclave et de son environnement et sont conçus pour les tests et le développement.Also, attestation services typically support different policies and attestation protocols, some of which perform minimal verification of the enclave and its environment, and are designed for testing and development. Respectez scrupuleusement les instructions spécifiques à votre service d’attestation pour vérifier que vous utilisez les configurations et les stratégies recommandées pour vos déploiements de production.Closely follow the guidelines specific to your attestation service to ensure you are using the recommended configurations and policies for your production deployments.
  • Le chiffrement d’une colonne à l’aide d’un chiffrement aléatoire avec une clé CEK prenant en charge les enclaves peut entraîner une fuite de l’ordre des données stockées dans la colonne, puisque ces colonnes prennent en charge des comparaisons de plages.Encrypting a column using randomized encryption with an enclave-enabled CEK may result in leaking the order of data stored in the column, as such columns support range comparisons. Par exemple, si une colonne chiffrée contenant les salaires des employés a un index, un administrateur de base de données malveillant pourrait analyser l’index pour trouver la valeur de salaire chiffrée maximale et identifier une personne touchant le salaire maximal (en supposant que le nom de la personne n’est pas chiffré).For example, if an encrypted column, containing employee salaries, has an index, a malicious DBA could scan the index to find the maximum encrypted salary value and identify a person with the maximum salary (assuming the name of the person is not encrypted).
  • Si vous utilisez Always Encrypted pour protéger des données sensibles contre un accès non autorisé des administrateurs de bases de données, ne partagez pas les clés principales des colonnes ou les clés de chiffrement des colonnes avec les administrateurs de bases de données.If you use Always Encrypted to protect sensitive data from unauthorized access by DBAs, do not share the column master keys or column encryption keys with the DBAs. Un administrateur de base de données peut gérer des index sans avoir directement accès aux clés, en tirant parti du cache des clés de chiffrement de colonne au sein de l’enclave.A DBA can manage indexes on encrypted columns without having direct access to the keys, by leveraging the cache of column encryption keys inside the enclave.

Considérations relatives aux groupes de disponibilité et à la migration de base de donnéesConsiderations for Availability Groups and Database Migration

Quand vous configurez un groupe de disponibilité Always On requis pour prendre en charge des requêtes à l’aide d’enclaves, vous devez vous assurer que toutes les instances de SQL Server qui hébergent les bases de données dans le groupe de disponibilité prennent en charge Always Encrypted avec des enclaves sécurisées et ont une enclave configurée.When configuring an Always On availability group that is required to support queries using enclaves, you need to ensure that all SQL Server instances hosting the databases in the availability group support Always Encrypted with secure enclaves and have an enclave configured. Si la base de données principale prend en charge les enclaves, mais que ce n’est pas le cas d’un réplica secondaire, toute requête qui tente d’utiliser la fonctionnalité d’Always Encrypted avec des enclaves sécurisés échoue.If the primary database supports enclaves, but a secondary replica does not, any query that attempts to use the functionality of Always Encrypted with secure enclaves will fail.

Lorsque vous restaurez un fichier de sauvegarde d’une base de données qui utilise la fonctionnalité d’Always Encrypted avec des enclaves sécurisées sur une instance de SQL Server qui n’a pas d’enclave configurée, l’opération de restauration réussit et toutes les fonctionnalités qui ne reposent pas sur l’enclave sont disponibles.When you restore a backup file of a database that uses the functionality of Always Encrypted with secure enclaves on a SQL Server instance that doesn't have the enclave configured, the restore operation will succeed and all the functionality that doesn't rely on the enclave will be available. Toutefois, toutes les requêtes suivantes utilisant la fonctionnalité de l’enclave échouent, et les index sur des colonnes prenant en charge des enclaves à l’aide d’un chiffrement aléatoire ne sont plus valides.However, any subsequent queries using the enclave functionality will fail, and indexes on enclave-enabled columns using randomized encryption will become invalid. La même chose est valable lorsque vous joignez une base de données utilisant Always Encrypted avec des enclaves sécurisées sur l’instance pour laquelle l’enclave n’est pas configurée.The same applies when you attach a database using Always Encrypted with secure enclaves on the instance that doesn't have the enclave configured.

Si votre base de données contient des index sur des colonnes prenant en charge les enclaves utilisant un chiffrage aléatoire, veillez à activer Récupération de base de données accélérée (ADR) dans la base de données avant de créer une sauvegarde de base de données.If your database contains indexes on enclave-enabled columns using randomized encryption, make sure you enable Accelerated database recovery (ADR) in the database before creating a database backup. ADR garantit que la base de données, notamment les index, est disponible immédiatement après la restauration de la base de données.ADR will ensure the database, including the indexes, is available immediately after you restore the database. Pour plus d’informations, consultez Récupération de la base de données.For more information, see Database Recovery.

Lorsque vous migrez votre base de données à l’aide d’un fichier bacpac, vous devez vous assurer que vous supprimez toutes les colonnes des index prenant en charge les enclaves à l’aide d’un chiffrement aléatoire avant de créer le fichier bacpac.When you migrate your database using a bacpac file, you need to make sure you drop all indexes enclave-enabled columns using randomized encryption before creating the bacpac file.

Limitations connuesKnown Limitations

Les enclaves sécurisés améliorent la fonctionnalité d’Always Encrypted.Secure enclaves enhance the functionality of Always Encrypted. Les fonctionnalités suivantes sont désormais pris en charge pour les colonnes prenant en charge les enclaves :The following capabilities are now supported for enclave-enabled columns:

  • Opérations de chiffrement sur place.In-place cryptographic operations.
  • Critères spéciaux (LIKE) et les opérateurs de comparaison sur la colonne chiffrée à l’aide d’un chiffrement aléatoire.Pattern matching (LIKE) and comparison operators on column encrypted using randomized encryption.

    Notes

    Les opérations ci-dessus sont prises en charge pour les colonnes de chaînes de caractères qui utilisent des classements avec un ordre de tri binary2 (classements BIN2).The above operations are supported for character string columns that use collations with a binary2 sort order (BIN2 collations). Les colonnes de chaînes de caractères utilisant des classements autres que BIN2 peuvent être chiffrées avec un chiffrement aléatoire et des clés de chiffrement de colonne prenant en charge les enclaves.Character string columns using non-BIN2 collations can be encrypted using randomized encryption and enclave-enabled column encryption keys. Toutefois, la seule fonctionnalité nouvelle activée pour ces colonnes est le chiffrement sur place.However, the only new functionality that is enabled for such columns is in-place encryption.

  • Création d’index non cluster sur les colonnes à l’aide d’un chiffrement aléatoire.Creating nonclustered indexes on columns using randomized encryption.

Tous les autres limitations (non résolues par les améliorations ci-dessus) qui sont répertoriées pour Always Encrypted (sans enclaves sécurisées) sous Informations sur les fonctionnalités s’appliquent également à Always Encrypted avec enclaves sécurisés.All other limitations (not addressed by the above enhancements) that are listed for Always Encrypted (without secure enclaves) at Feature Details also apply to Always Encrypted with secure enclaves.

Les limitations suivantes sont spécifiques à Always Encrypted avec enclaves sécurisées :The following limitations are specific to Always Encrypted with secure enclaves:

  • Il est impossible de créer des index cluster sur des colonnes prenant en charge les enclaves à l’aide d’un chiffrement aléatoire.Clustered indexes can't be created on enclave-enabled columns using randomized encryption.
  • Les colonnes prenant en charge les enclaves utilisant un chiffrement aléatoire ne peuvent pas être des colonnes de clé primaire, ni être référencées par des contraintes de clé étrangères ou des contraintes de clé unique.Enclave-enabled columns using randomized encryption can't be primary key columns and cannot be referenced by foreign key constraints or unique key constraints.
  • Les jointures hachées et les jointures fusionnées sur des colonnes prenant en charge les enclaves à l’aide du chiffrement aléatoire ne sont pas prises en charge.Hash joins and merged joins on enclave-enabled columns using randomized encryption are not supported. Seules les jointures de boucles imbriquées (utilisant des index, le cas échéant) sont prises en charge.Only nested loop joins (using indexes, if available) are supported.
  • Les requêtes avec l’opérateur LIKE ou un opérateur de comparaison avec un paramètre de requête utilisant l’un des types de données suivants (qui deviennent des objets volumineux après chiffrement) ignorent les index et effectuent des analyses de table.Queries with the LIKE operator or a comparison operator that has a query parameter using one of the following data types (that become large objects after encryption) ignore indexes and perform table scans.
    • nchar[n] et nvarchar[n] si n est supérieur à 3967.nchar[n] and nvarchar[n], if n is greater than 3967.
    • char[n], varchar[n], binary[n], varbinary[n] si n est supérieur à 7935.char[n], varchar[n], binary[n], varbinary[n], if n is greater than 7935.
  • Les opérations de chiffrement sur place ne peuvent pas être combinées avec d’autres modifications des métadonnées de la colonne, à l’exception des modifications d’un classement au sein de la même page de codes et possibilité de valeur null.In-place cryptographic operations cannot be combined with any other changes of column metadata, except changing a collation within the same code page and nullability. Par exemple, vous ne pouvez pas chiffrer, chiffrer à nouveau ou déchiffrer une colonne ET modifier un type de données de la colonne dans une instruction Transact-SQL ALTER TABLE ou ALTER COLUMN unique.For example, you cannot encrypt, re-encrypt, or decrypt a column AND change a data type of the column in a single ALTER TABLE or ALTER COLUMN Transact-SQL statement. Utilisez deux instructions distinctes.Use two separate statements.
  • L’utilisation de clés prenant en charge les enclaves pour les colonnes dans des tables en mémoire n’est pas prise en charge.Using enclave-enabled keys for columns in in-memory tables isn't supported.
  • Les expressions qui définissent des colonnes calculées ne peuvent pas effectuer de calculs sur des colonnes avec enclave à l’aide d’un chiffrement aléatoire (même si les calculs sont basés sur des comparaisons Like ou Range).Expressions defining computed columns cannot perform any computations on enclave-enabled columns using randomized encryption (even if the computations are LIKE and range comparisons)..
  • Les seuls magasins de clés pris en charge pour le stockage des clés principales de colonne prenant en charge l’enclave sont le Magasin de certificats Windows et Azure Key Vault.The only supported key stores for storing enclave-enabled column master keys are Windows Certificate Store and Azure Key Vault.

Les limitations suivantes s’appliquent àSQL Server 2019SQL Server 2019, mais il est prévu de les résoudre :The following limitations apply to SQL Server 2019SQL Server 2019, but are on the roadmap to be addressed:

  • La création de statistiques pour des colonnes prenant en charge les enclaves à l’aide d’un chiffrement aléatoire n’est pas prise en charge.Creating statistics for enclave-enabled columns using randomized encryption is not supported.
  • Le seul pilote client prenant en charge Always Encrypted avec enclaves sécurisées est le fournisseur de données .NET Framework pour SQL Server (ADO.NET) dans .NET Framework 4.7.2.The only client driver supporting Always Encrypted with secure enclaves is .NET Framework Data Provider for SQL Server (ADO.NET) in .NET Framework 4.7.2. ODBC/JDBC n’est pas pris en charge.ODBC/JDBC isn't supported.
  • Actuellement, la prise en charge des outils pour Always Encrypted avec enclaves sécurisées est incomplète.Tooling support for Always Encrypted with secure enclaves is currently incomplete. En particulier :In particular:
    • L’importation/l’exportation de bases de données contenant des clés prenant en charge les enclaves n’est pas prise en charge.Import/exporting databases containing enclave-enabled keys is not supported.
    • Pour déclencher une opération de chiffrement sur place via une instruction Transact-SQL ALTER TABLE, vous devez émettre l’instruction à l’aide d’une fenêtre de requête dans SSMS, ou vous pouvez écrire votre propre programme qui émet l’instruction.To trigger an in-place cryptographic operation via an ALTER TABLE Transact-SQL statement, you need to issue the statement using a query window in SSMS, or you can write your own program that issues the statement. La cmdlet Set-SqlColumnEncryption dans le module PowerShell SqlServer et l’Assistant Always Encrypted dans SQL Server Management Studio ne prennent pas encore en charge le chiffrement sur place. Actuellement, ces deux outils déplacement les données en dehors de la base de données pour les opérations de chiffrement, même si les clés de chiffrement de colonne utilisées pour les opérations prennent en charge l’enclave.The Set-SqlColumnEncryption cmdlet in the SqlServer PowerShell module and the Always Encrypted wizard in SQL Server Management Studio do not support in-place encryption yet - both tools currently move the data out of the database for cryptographic operations, even if the column encryption keys used for the operations are enclave-enabled.
  • Les commandes DBCC vérifiant l’intégrité des index ou mettant à jour des index ne sont pas prises en charge.DBCC commands checking the integrity of indexes or updating indexes are not supported.
  • Création d’index sur des colonnes chiffrées lors de la création de la table (par le biais de CREATE TABLE).Creating indexes on encrypted columns at the time of creating the table (via CREATE TABLE). Vous devez créer un index sur une colonne chiffrée séparément par le biais de CREATE INDEX.You need to create an index on an encrypted column separately via CREATE INDEX.

Étapes suivantesNext steps