Tutoriel : Bien démarrer dans l’utilisation d’Always Encrypted avec enclaves sécurisées dans SQL Server
S’applique à : SQL Server 2019 (15.x) et versions ultérieures - Windows uniquement
Ce tutoriel explique comment utiliser Always Encrypted avec enclaves sécurisées dans SQL Server. Il vous montre comment :
- Créer un environnement de base pour tester et évaluer Always Encrypted avec enclaves sécurisées sans attestation configurée pour les enclaves.
- Chiffrer des données sur place et émettre des requêtes confidentielles complexes sur des colonnes chiffrées en utilisant SQL Server Management Studio (SSMS).
Si vous souhaitez apprendre à configurer Always Encrypted avec des enclaves sécurisées à l’aide du service Host Guardian pour l’attestation d’enclave, consultez le Tutoriel : commencer à utiliser Always Encrypted avec des enclaves sécurisées dans SQL Server avec l’attestation à l’aide de HGS
Prérequis
L’ordinateur hébergeant votre instance SQL Server (appelée ordinateur SQL Server) doit répondre aux exigences suivantes :
- SQL Server 2019 (15.x) ou versions ultérieures.
- Windows 10 ou version ultérieure, Windows Server 2019 ou version ultérieure.
- Prise en charge du processeur pour les technologies de virtualisation :
- Intel VT-x avec Extended Page Tables.
- AMD-V avec Rapid Virtualization Indexing.
- Si vous exécutez SQL Server dans une machine virtuelle :
- Dans Azure, utilisez une taille de machine virtuelle de deuxième génération (recommandé) ou une taille de machine virtuelle de première génération avec virtualisation imbriquée. Pour savoir quelles tailles de machines virtuelles de première génération prennent en charge la virtualisation imbriquée, consultez la documentation relative aux différentes tailles de machines virtuelles.
- Sur Hyper-V 2016 ou versions ultérieures (en dehors d’Azure), vérifiez que votre machine virtuelle est une machine virtuelle de deuxième génération (recommandé) ou une machine virtuelle de première génération avec virtualisation imbriquée. Pour plus d’informations, consultez Dois-je créer une machine virtuelle de première ou de deuxième génération dans Hyper-V ? et Configuration de la virtualisation imbriquée.
- Sur VMware vSphere 6.7 ou ultérieur, activez la prise en charge de la sécurité basée sur la virtualisation pour la machine virtuelle, comme le décrit la documentation VMware.
- D’autres hyperviseurs et clouds publics peuvent prendre en charge les fonctionnalités de virtualisation imbriquées qui permettent aussi l’utilisation d’Always Encrypted avec enclaves VBS. Consultez les instructions relatives à la compatibilité et à la configuration dans la documentation de votre solution de virtualisation.
- La dernière version de SQL Server Management Studio (SSMS). Vous pouvez aussi installer SSMS sur un autre ordinateur.
Avertissement
Dans les environnements de production, l’exécution de SSMS et d’autres outils de gestion de clés sur l’ordinateur SQL Server peut empêcher de profiter des avantages d’Always Encrypted en matière de sécurité. Il est en général recommandé d’exécuter ces outils sur un autre ordinateur. Pour plus d’informations, consultez Considérations en matière de sécurité pour la gestion des clés.
Étape 1 : vérifier que la sécurité basée sur la virtualisation (VBS) est activée
Connectez-vous à votre ordinateur SQL Server en tant qu’administrateur, ouvrez une console Windows PowerShell élevée et exécutez msinfo32.exe. Vérifiez si VBS est en cours d’exécution. Si VBS est en cours d’exécution, ignorez les étapes restantes de cette section et accédez à la section suivante.
Activez VBS en exécutant l’applet de commande suivante dans la session PowerShell.
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name EnableVirtualizationBasedSecurity -Value 1
Si votre ordinateur SQL Server est une machine virtuelle, une machine physique qui ne prend pas en charge le démarrage sécurisé UEFI ou une machine physique non équipée d’IOMMU, vous devez supprimer la condition VBS pour les fonctionnalités de sécurité de la plateforme. Supprimez l’exigence de démarrage sécurisé et d’IOMMU en exécutant la commande suivante sur votre ordinateur SQL Server dans une console PowerShell avec élévation de privilèges :
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
Redémarrez à nouveau l’ordinateur SQL Server pour mettre VBS en ligne.
Restart-Computer
Répétez l’étape 1 pour vérifier si VBS est en cours d’exécution.
Étape 2 : activer Always Encrypted avec enclaves sécurisées dans SQL Server
Dans cette étape, vous allez activer la fonctionnalité Always Encrypted avec enclaves dans votre instance de SQL Server.
À l’aide de SSMS, connectez-vous à votre instance de SQL Server en tant que sysadmin sans Always Encrypted activé pour la connexion de base de données.
Démarrer SSMS.
Dans la boîte de dialogue Se connecter au serveur, spécifiez le nom de votre serveur, sélectionnez une méthode d’authentification et spécifiez vos informations d’identification.
Sélectionnez Options >>, puis l’onglet Always Encrypted.
Assurez-vous que la case Activer Always Encrypted (chiffrement de colonne) n’est pas cochée.
Sélectionnez Connecter.
Ouvrez une nouvelle fenêtre de requête et exécutez l’instruction ci-dessous pour définir le type d’enclave sécurisée sur la sécurité basée sur la virtualisation (VBS).
EXEC sys.sp_configure 'column encryption enclave type', 1; RECONFIGURE;
Redémarrez votre instance SQL Server pour que la modification précédente prenne effet. Vous pouvez redémarrer l’instance dans SSMS en cliquant dessus avec le bouton droit dans l’Explorateur d’objets et en sélectionnant Redémarrer. Une fois que l’instance a redémarré, connectez-vous à nouveau.
Vérifiez que l’enclave sécurisée est maintenant chargée en exécutant la requête suivante :
SELECT [name], [value], [value_in_use] FROM sys.configurations WHERE [name] = 'column encryption enclave type';
La requête doit retourner le résultat suivant :
name valeur value_in_use column encryption enclave type 1 1
Étape 3 : créer un exemple de base de données
Dans cette étape, vous allez créer une base de données avec des exemples de données, qui vous allez par la suite chiffrer.
À l’aide de l’instance SSMS dans l’étape précédente, exécutez l’instruction ci-dessous dans une fenêtre de requête pour créer une nouvelle base de données, nommée ContosoHR.
CREATE DATABASE [ContosoHR];
Créez une nouvelle table nommée Employés.
USE [ContosoHR]; GO CREATE SCHEMA [HR]; GO CREATE TABLE [HR].[Employees] ( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [SSN] [char](11) NOT NULL, [FirstName] [nvarchar](50) NOT NULL, [LastName] [nvarchar](50) NOT NULL, [Salary] [money] NOT NULL ) ON [PRIMARY];
Ajoutez quelques enregistrements d’employés à la table Employés.
USE [ContosoHR]; GO INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('795-73-9838' , N'Catherine' , N'Abel' , $31692); INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('990-00-6818' , N'Kim' , N'Abercrombie' , $55415);
Étape 4 : Approvisionner des clés prenant en charge les enclaves
Dans cette étape, vous allez créer une clé principale de colonne et une clé de chiffrement de colonne qui permettent les calculs d’enclave.
À l’aide de l’instance SSMS dans l’étape précédente, dans Explorateur d’objets, développez votre base de données et accédez à Sécurité>Clés Always Encrypted.
Provisionnez une nouvelle clé principale de colonne prenant en charge les enclaves :
Cliquez avec le bouton droit sur Clés Always Encrypted et sélectionnez Nouvelle clé principale de colonne... .
Sélectionnez le nom de votre clé principale de colonne : CMK1.
Veillez à sélectionnez Magasin de certificats Windows (utilisateur actuel ou ordinateur local) ou Azure Key Vault.
Sélectionnez Autoriser les calculs d’enclave.
Si vous avez sélectionné Azure Key Vault, connectez-vous à Azure et sélectionnez votre coffre de clés. Pour plus d’informations sur la création d’un coffre de clés pour Always Encrypted, consultez Gérer vos coffres de clés à partir du portail Azure.
Sélectionnez votre certificat ou votre clé Valeur de clé Azure, ou bien sélectionnez le bouton Générer un certificat pour en créer un.
Cliquez sur OK.
Créez une clé de chiffrement de colonne prenant en charge les enclaves :
- Cliquez avec le bouton droit sur Clés Always Encrypted et sélectionnez Nouvelle clé de chiffrement de colonne.
- Entrez un nom pour la nouvelle clé de chiffrement de colonne : CEK1.
- Dans le menu déroulant Clé principale de colonne, sélectionnez la clé principale de colonne que vous avez créée aux étapes précédentes.
- Sélectionnez OK.
Étape 5 : Chiffrer des colonnes sur place
Dans cette étape, vous allez chiffrer les données stockées dans les colonnes SSN et Salaire à l’intérieur de l’enclave côté serveur, puis vous testerez une requête SELECT sur les données.
Ouvrez une nouvelle instance SSMS et connectez-vous à votre instance SQL Server avec Always Encrypted activé pour la connexion de base de données.
Démarrez une nouvelle instance SSMS.
Dans la boîte de dialogue Se connecter au serveur, spécifiez le nom de votre serveur, sélectionnez une méthode d’authentification et spécifiez vos informations d’identification.
Sélectionnez Options >>, puis l’onglet Always Encrypted.
Cochez la case Activer Always Encrypted (chiffrement de colonne).
Sélectionnez Activer les enclaves sécurisées.
Définissez Protocole sur Aucun.
Sélectionnez Connecter.
Si vous êtes invité à activer les requêtes Paramétrage pour Always Encrypted, sélectionnez Activer.
En utilisant la même instance SSMS (avec Always Encrypted activé), ouvrez une nouvelle fenêtre de requête et chiffrez les colonnes SSN et Salaire en exécutant les requêtes ci-dessous.
USE [ContosoHR]; GO ALTER TABLE [HR].[Employees] ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER TABLE [HR].[Employees] ALTER COLUMN [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Remarque
Notez l’instruction ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE destinée à effacer le cache du plan de requête de la base de données dans le script ci-dessus. Une fois que vous avez modifié la table, vous devez effacer les plans pour l’ensemble des lots et des procédures stockées qui accèdent à la table, afin d’actualiser les informations de chiffrement des paramètres.
Pour vérifier que les colonnes SSN et Salaire sont maintenant chiffrées, ouvrez une nouvelle fenêtre de requête dans l’instance SSMS sans Always Encrypted activé pour la connexion de base de données et exécutez l’instruction ci-dessous. La fenêtre de requête doit retourner des valeurs chiffrées dans les colonnes SSN et Salaire. Si vous exécutez la même requête à l’aide de l’instance SSMS avec Always Encrypted activé, vous devez voir les données déchiffrées.
SELECT * FROM [HR].[Employees];
Étape 6 : Exécuter des requêtes complexes sur les colonnes chiffrées
À présent, vous pouvez exécuter des requêtes complexes sur les colonnes chiffrées. Un traitement de requête se produit à l’intérieur de votre enclave côté serveur.
Dans l’instance SSMS avec Always Encrypted activé, vérifiez que Paramétrage pour Always Encrypted est également activé.
- Sélectionnez Outils dans le menu principal de SSMS.
- Sélectionnez Options... .
- Accédez à Exécution de la requête>SQL Server>Avancé.
- Vérifiez que la case Activer Paramétrage pour Always Encrypted est cochée.
- Cliquez sur OK.
Ouvrez une nouvelle fenêtre de requête, collez et exécutez la requête ci-dessous. La requête doit retourner des valeurs de texte en clair et des lignes correspondant aux critères de recherche spécifiés.
DECLARE @SSNPattern [char](11) = '%6818'; DECLARE @MinSalary [money] = $1000; SELECT * FROM [HR].[Employees] WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
Réessayez la même requête dans l’instance SSMS où Always Encrypted n’est pas activé et remarquez l’échec qui se produit.
Étapes suivantes
À l’issue de ce tutoriel, vous pouvez accéder à l’un des tutoriels suivants :
- Tutoriel : Développer une application .NET en utilisant Always Encrypted avec enclaves sécurisées
- Tutoriel : Développer une application .NET Framework avec Always Encrypted avec enclaves sécurisées
- Tutoriel : Création et utilisation des index sur des colonnes prenant en charge les enclaves à l’aide d’un chiffrement aléatoire