Événement
31 mars, 23 h - 2 avr., 23 h
Le plus grand événement d’apprentissage SQL, Fabric et Power BI. 31 mars au 2 avril. Utilisez le code FABINSIDER pour économiser 400 $.
Inscrivez-vous aujourd’huiCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
S’applique à : SQL Server 2019 (15.x) et versions ultérieures - Windows uniquement
Azure SQL Database
Always Encrypted avec enclaves sécurisées étend les fonctionnalités de calcul confidentiel d’Always Encrypted avec le chiffrement sur place et des requêtes confidentielles plus riches. Always Encrypted avec enclaves sécurisées est disponible dans SQL Server 2019 (15.x) et versions ultérieures et dans Azure SQL Database.
Introduit dans la base de données Azure SQL en 2015 et dans SQL Server 2016 (13.x), Always Encrypted protège la confidentialité des données sensibles contre les programmes malveillants et les utilisateurs non autorisés à haut privilège. Il s’agit des Administrateurs de bases de données (DBA), des administrateurs informatiques, administrateurs cloud, ou toute autre personne ayant un accès légitime aux instances de serveur, au matériel, etc. mais qui ne devrait pas avoir accès à une partie ou à la totalité des données réelles.
Sans les améliorations présentées dans cet article, Always Encrypted protège les données en les chiffrant côté client et en ne permettant jamais aux données ou aux clés de chiffrement correspondantes d'apparaître en texte en clair dans le moteur de base de données. Par conséquent, la fonctionnalité sur les colonnes chiffrées à l’intérieur de la base de données est extrêmement limitée. Les seules opérations que le moteur de base de données peut effectuer sur des données chiffrées sont les comparaisons d'égalité (disponibles uniquement avec le chiffrement déterministe). Toutes les autres opérations, notamment les opérations de chiffrement (chiffrement de données initial ou rotation de clés) et/ou les requêtes riches (par exemple, les critères spéciaux), ne sont pas prises en charge à l’intérieur de la base de données. Les utilisateurs doivent déplacer les données hors de la base de données pour effectuer ces opérations côté client.
Always Encrypted avec enclaves sécurisées résout ces limitations en autorisant des calculs sur les données de texte en clair à l’intérieur d’une enclave sécurisée côté serveur. Une enclave sécurisée est une région protégée de la mémoire au sein du processus Moteur de base de données. L’enclave sécurisée apparaît comme une zone opaque pour le reste de Moteur de base de données et les autres processus de l’ordinateur d’hébergement. 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. Ces propriétés font de l’enclave sécurisée un environnement d’exécution approuvé capable d’accéder de manière sécurisée aux clés de chiffrement et aux données sensibles en clair, sans compromettre la confidentialité des données.
Always Encrypted utilise des enclaves sécurisées, comme illustré dans le diagramme suivant :
Lors de l'analyse d'une instruction Transact-SQL soumise par une application, le moteur de base de données détermine si l'instruction contient des opérations sur des données chiffrées nécessitant l'utilisation de l'enclave sécurisée. Pour de telles instructions :
Le pilote client envoie les clés de chiffrement de colonne requises pour les opérations à l’enclave sécurisée (sur un canal sécurisé) et envoie l’instruction pour exécution.
Lors du traitement de l'instruction, le moteur de base de données délègue les opérations cryptographiques ou les calculs sur les colonnes chiffrées à l'enclave sécurisée. Si nécessaire, l’enclave déchiffre les données et effectue des calculs sur du texte en clair.
Pendant le traitement des instructions, les données et les clés de chiffrement des colonnes ne sont pas exposées dans un texte en clair dans le moteur de base de données en dehors de l'enclave sécurisée.
Pour utiliser Always Encrypted avec enclaves sécurisées, une application doit utiliser un pilote client qui prend en charge la fonctionnalité. Configurez l'application et le pilote client pour permettre les calculs et l'attestation d'enclave (voir la section Attestation d'enclave sécurisée ci-dessous). Pour plus d’informations, notamment la liste des pilotes clients pris en charge, consultez Développer des applications à l’aide d’Always Encrypted.
Always Encrypted prend en charge les technologies d'enclave (ou types d'enclave) suivantes :
Le type d'enclave disponible pour votre base de données dépend du produit SQL qui l'héberge (Azure SQL Database ou SQL Server) et (dans le cas d'Azure SQL Database) de la configuration de votre base de données.
Dans SQL Server 2019 (15.x) et versions ultérieures, Always Encrypted prend en charge les enclaves de sécurité basée sur la virtualisation. (Les enclaves Intel SGX ne sont pas prises en charge.)
Dans Azure SQL Database, une base de données peut utiliser une enclave Intel SGX ou une enclave de sécurité basée sur la virtualisation, en fonction du matériel sur lequel la base de données est configurée pour s'exécuter :
Note
Les enclaves de sécurité basée sur la virtualisation sont disponibles dans toutes les régions Azure SQL Database sauf : Jio Inde Centre.
Reportez-vous à la section Considérations de sécurité pour obtenir des informations importantes sur le niveau de protection offert par chaque type d'enclave.
L'attestation d'enclave est un mécanisme de défense en profondeur qui permet de détecter les attaques impliquant la falsification du code de l'enclave ou de son environnement par des administrateurs malveillants.
L'attestation d'enclave permet à une application cliente d'établir la confiance avec l'enclave sécurisée de la base de données à laquelle l'application est connectée, avant que l'application n'utilise l'enclave pour traiter des données sensibles. Le processus d'attestation vérifie que l'enclave est une enclave de sécurité basée sur la virtualisation ou Intel SGX authentique et que le code qui s'exécute à l'intérieur est la bibliothèque d'enclave authentique signée par Microsoft pour Always Encrypted. Pendant l'attestation, le pilote client de l'application et le moteur de base de données communiquent avec un service d'attestation externe à l'aide d'un point de terminaison spécifié par le client.
Always Encrypted peut utiliser l'un des deux services d'attestation :
Pour activer Always Encrypted avec enclaves sécurisées pour votre application, vous devez définir un protocole d'attestationdans la configuration du pilote client dans votre application. Une valeur de protocole d'attestation détermine si 1) l'application cliente utilisera l'attestation et, le cas échéant, 2) elle spécifie le type de service d'attestation qu'elle utilisera. Le tableau ci-dessous présente les protocoles d'attestation pris en charge pour les combinaisons valides de produits SQL et de types d'enclaves :
Produit d'hébergement | Type d'enclave | Protocoles d'attestation pris en charge |
---|---|---|
SQL Server 2019 (15.x) et versions ultérieures | Enclaves de sécurité basée sur la virtualisation | SGH, aucune attestation |
Azure SQL Database | Enclaves SGX (bases de données de série DC) | Microsoft Azure Attestation |
Azure SQL Database | Enclaves de sécurité basée sur la virtualisation | Pas d'attestation |
Quelques points importants à souligner :
Pour plus d’informations, consultez l’article suivant :
Always Encrypted avec enclaves sécurisées introduit le concept des clés prenant en charge l’enclave :
master
de colonne avec la propriété ENCLAVE_COMPUTATIONS
spécifiée dans l’objet de métadonnées de la clé master
de colonne à l’intérieur de la base de données. L’objet de métadonnées de la clé master
de colonne doit également contenir une signature valide des propriétés des métadonnées. Pour plus d’informations, consultez CREATE COLUMN MASTER KEY (Transact-SQL).master
de colonne prenant en charge l’enclave. Seules les clés de chiffrement de colonne prenant en charge les enclaves peuvent être utilisées pour les calculs à l’intérieur de l’enclave sécurisée.Pour plus d’informations, consultez Gérer des clés pour Always Encrypted avec enclaves sécurisées.
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.
Les deux principaux avantages d’Always Encrypted avec enclaves sécurisées sont le chiffrement sur place et les requêtes confidentielles riches.
Le chiffrement sur place autorise des opérations de chiffrement sur les colonnes de base de données à l’intérieur de l’enclave sécurisée, sans déplacer les données hors de la base de données. Le chiffrement sur place améliore les performances et la fiabilité des opérations cryptographiques. Vous pouvez effectuer un chiffrement sur place à l’aide de l’instruction ALTER TABLE (Transact-SQL).
Les opérations de chiffrement sur place prises en charge sont les suivantes :
Le chiffrement sur place est autorisé avec les chiffrements déterministe et aléatoire, à condition que les clés de chiffrement de colonne impliquées dans une opération de chiffrement prennent en charge les enclaves.
Note
SQL Server 2022 (16.x) ajoute une prise en charge supplémentaire des requêtes confidentielles avec les opérations JOIN, GROUP BY et ORDER BY sur des colonnes chiffrées.
Les requêtes confidentielles sont des requêtes DML qui impliquent des opérations sur des colonnes prenant en charge les enclaves effectuées à l’intérieur de l’enclave sécurisée.
Les opérations prises en charge dans les enclaves sécurisées sont les suivantes :
Opération | Azure SQL Database | SQL Server 2022 (16.x) | SQL Server 2019 (15.x) |
---|---|---|---|
Opérateurs de comparaison | Prise en charge | Prise en charge | Prise en charge |
BETWEEN (Transact-SQL) | Prise en charge | Prise en charge | Prise en charge |
IN (Transact-SQL) | Prise en charge | Prise en charge | Prise en charge |
LIKE (Transact-SQL) | Prise en charge | Prise en charge | Prise en charge |
DISTINCT | Prise en charge | Prise en charge | Prise en charge |
Joins | Prise en charge | Prise en charge | Seules les jointures de boucles imbriquées sont prises en charge |
SELECT - Clause ORDER BY (Transact-SQL) | Prise en charge | Prise en charge | Non prise en charge |
SELECT - GROUP BY- Transact-SQL | Prise en charge | Prise en charge | Non prise en charge |
Note
Les opérations ci-dessus à l'intérieur d'enclaves sécurisées nécessitent un chiffrement aléatoire. Le chiffrement déterministe n’est pas pris en charge. La comparaison d'égalité reste l'opération disponible pour les colonnes en utilisant le chiffrement déterministe.
Le niveau de compatibilité de la base de données doit être défini sur SQL Server 2022 (160) ou plus.
Dans Azure SQL Database et dans SQL Server 2022 (16.x), les requêtes confidentielles utilisant des enclaves sur une colonne de chaîne de caractères (char
, nchar
) requièrent que la colonne utilise un classement de code de caractère binaire (_BIN2) ou un classement UTF-8. Dans SQL Server 2019 (15.x), un classement _BIN2 est requis.
Pour en savoir plus, reportez-vous à Exécuter des instructions Transact-SQL à l'aide d'enclaves sécurisées.
Vous pouvez créer des index non cluster sur des colonnes prenant en charge les enclaves à l’aide du chiffrement aléatoire pour accélérer l’exécution des requêtes DML confidentielles utilisant l’enclave sécurisée.
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, 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. Le tri par la valeur de texte en clair est également utile pour traiter les requêtes à l’intérieur de l’enclave. Lorsque l'exécuteur de requêtes du moteur de base de données utilise un index sur une colonne chiffrée pour des calculs à l'intérieur de l'enclave, il recherche dans l'index des valeurs spécifiques stockées dans la colonne. Chaque recherche peut impliquer plusieurs comparaisons. 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.
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.
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.
Pour plus d’informations, consultez Créer et utiliser des index sur des colonnes à l’aide d’Always Encrypted avec enclaves sécurisées. Pour obtenir des informations générales sur le fonctionnement de l'indexation dans le moteur de base de données, reportez-vous à l'article intitulé Indexes cluster et non cluster décrits.
En cas de défaillance d'une instance SQL Server, ses bases de données peuvent être laissées dans un état à partir duquel les fichiers de données peuvent contenir des modifications dues à des transactions incomplètes. 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. Si une transaction incomplète a apporté des modifications à un index, ces modifications doivent également être annulées. Par exemple, certaines valeurs clés de l'index peuvent devoir être supprimées ou réinsérées.
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. ADR est activé par défaut dans Azure SQL Database et Azure SQL Managed Instance. ADR est disponible mais n’est pas activé par défaut dans SQL Server 2019 (15.x) et versions ultérieures.
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, le moteur de base de données 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. La récupération de base de données accélérée (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. Par conséquent, il augmente considérablement la disponibilité de la base de données en minimisant la possibilité pour une nouvelle transaction d’être bloquée. Avec ADR activé, le moteur de base de données peut toujours avoir besoin d’une clé de chiffrement de colonne pour nettoyer les anciennes versions de données, mais cela est une tâche en arrière-plan qui n’a pas d’impact sur la disponibilité de la base de données ou des transactions utilisateur. Vous pouvez voir des messages d'erreur dans le journal des erreurs, indiquant l'échec des opérations de nettoyage en raison d'une clé de chiffrement de colonne manquante.
Les considérations de sécurité suivantes s’appliquent à Always Encrypted avec enclaves sécurisés.
master
des colonnes ou les clés de chiffrement des colonnes avec les administrateurs de bases de données. Un administrateur de base de données peut gérer des index sans avoir directement accès aux clés, en utilisant le cache des clés de chiffrement de colonne au sein de l’enclave.Lors de la configuration d’une solution à haute disponibilité ou de reprise d’activité après sinistre pour une base de données à l’aide d’Always Encrypted avec enclaves sécurisées, vérifiez que tous les réplicas de base de données peuvent utiliser une enclave sécurisée. Si une enclave est disponible pour le réplica principal, mais pas pour le réplica secondaire, toute instruction qui tente d’utiliser la fonctionnalité d’Always Encrypted avec enclaves sécurisées échoue après le basculement.
Quand vous copiez ou migrez une base de données à l’aide d’Always Encrypted avec enclaves sécurisées, vérifiez que l’environnement cible prend toujours en charge les enclaves. Sinon, les instructions qui utilisent des enclaves ne fonctionneront pas sur la copie ou la base de données migrée.
Voici les considérations spécifiques à prendre en compte :
SQL Server
Azure SQL Database
Dans SQL Server et Azure SQL Database, quand vous migrez votre base de données à l’aide d’un fichier bacpac, veillez à supprimer tous les index des colonnes prenant en charge les enclaves à l’aide d’un chiffrement aléatoire avant de créer le fichier bacpac.
Always Encrypted avec enclaves sécurisées résout certaines limitations d’Always Encrypted en prenant en charge le chiffrement sur place et les requêtes confidentielles riches avec index, comme cela est expliqué dans Fonctionnalités de calcul confidentiel pour les colonnes prenant en charge les enclaves.
Toutes les autres limitations d'Always Encrypted énumérées dans Limitations s'appliquent également à Always Encrypted avec enclaves sécurisées.
Les limitations suivantes sont spécifiques à Always Encrypted avec enclaves sécurisées :
ALTER TABLE
/ALTER COLUMN
. Utilisez deux instructions distinctes.nchar[n]
et nvarchar[n]
, si n est supérieur à 3967.char[n]
, varchar[n]
, binary[n]
, varbinary[n]
, si n est supérieur à 7935.master
de colonne prenant en charge l’enclave sont le Magasin de certificats Windows et Azure Key Vault.ALTER TABLE
/ALTER COLUMN
, vous devez émettre l'instruction à l'aide d'une fenêtre Requête dans SSMS ou Azure Data Studio, ou vous pouvez écrire votre propre programme qui émet l'instruction. Actuellement, la cmdlet Set-SqlColumnEncryption
du module SqlServer PowerShell et l'Assistant Always Encrypted de SQL Server Management Studio ne prennent pas en charge le chiffrement sur place. Déplacez les données hors de la base de données pour les opérations cryptographiques, même si les clés de chiffrement des colonnes utilisées pour les opérations sont activées par l'enclave.Événement
31 mars, 23 h - 2 avr., 23 h
Le plus grand événement d’apprentissage SQL, Fabric et Power BI. 31 mars au 2 avril. Utilisez le code FABINSIDER pour économiser 400 $.
Inscrivez-vous aujourd’huiFormation
Module
Protéger les données en transit et au repos - Training
Protéger les données en transit et au repos
Certification
Microsoft Certified : Azure Database Administrator Associate - Certifications
Administrer une infrastructure de base de données SQL Server pour les bases de données relationnelles cloud, locales et hybrides à l’aide des offres de bases de données relationnelles Microsoft PaaS.
Documentation
Vue d’ensemble d’Always Encrypted qui prend en charge le chiffrement transparent côté client, et le calcul confidentiel dans SQL Server et Azure SQL Database
Tutoriel : bien démarrer avec Always Encrypted - SQL Server
Ce tutoriel vous apprend à chiffrer les colonnes à l’aide de Always Encrypted et à interroger les colonnes chiffrées dans SQL Server, la base de données Azure SQL et Azure SQL Managed Instance.
Vue d’ensemble de la gestion de clés pour Always Encrypted - SQL Server
Découvrez comment gérer les deux types de clés de chiffrement utilisés par Always Encrypted pour protéger vos données dans SQL Server : clé de chiffrement de colonne et clé principale de colonne.