Exécuter des instructions Transact-SQL à l’aide d’enclaves sécurisées
S’applique à : SQL Server 2019 (15.x) et versions ultérieures - Windows uniquement Azure SQL Database
Always Encrypted avec enclaves sécurisées permet à certaines instructions T-SQL (Transact-SQL) d’effectuer des calculs confidentiels sur des colonnes de base de données chiffrées dans une enclave sécurisée côté serveur.
Instructions utilisant des enclaves sécurisées
Les types suivants d’instructions T-SQL utilisent des enclaves sécurisées.
Instructions DDL utilisant des enclaves sécurisées
Les types suivants d’instructions DDL (Data Definition Language) nécessitent des enclaves sécurisées.
- Instructions ALTER TABLE column_definition (Transact-SQL) qui déclenchent des opérations de chiffrement sur place avec des clés prenant en charge les enclaves. Pour plus d’informations, consultez Configurer le chiffrement de colonne sur place en utilisant Always Encrypted avec enclaves sécurisées.
- Instructions CREATE INDEX (Transact-SQL) et ALTER INDEX (Transact-SQL) qui créent ou modifient des index sur des colonnes prenant en charge les enclaves avec un chiffrement aléatoire. Pour plus d’informations, consultez Créer et utiliser des index sur des colonnes à l’aide d’Always Encrypted avec enclaves sécurisées.
Instructions DML utilisant des enclaves sécurisées
Les instructions ou requêtes DML (Data Manipulation Language) suivantes sur des colonnes prenant en charge les enclaves avec un chiffrement aléatoire nécessitent des enclaves sécurisées :
- Les requêtes qui utilisent un ou plusieurs des opérateurs Transact-SQL suivants sont prises en charge à l'intérieur d'enclaves sécurisées :
- Opérateurs de comparaison
- BETWEEN (Transact-SQL)
- IN (Transact-SQL)
- LIKE (Transact-SQL)
- DISTINCT
- Jointures : SQL Server 2019 (15.x) prend en charge uniquement les jointures de boucles imbriquées. SQL Server 2022 (16.x) et Azure SQL Database prennent en charge les jointures de boucles imbriquées, de code de hachage et de fusion
- SELECT - Clause ORDER BY (Transact-SQL). Prise en charge par SQL Server 2022 (16.x) et Azure SQL Database. Non prise en charge dans SQL Server 2019 (15.x)
- SELECT - Clause ORDER BY (Transact-SQL). Prise en charge par SQL Server 2022 (16.x) et Azure SQL Database. Non prise en charge dans SQL Server 2019 (15.x)
- Requêtes qui insèrent, mettent à jour ou suppriment des lignes, ce qui déclenche l’insertion et/ou la suppression d’une clé d’index dans un index sur une colonne prenant en charge les enclaves. Pour en savoir plus, reportez-vous à Créer et utiliser des index sur des colonnes utilisant Always Encrypted avec des enclaves sécurisées
Remarque
Les opérations sur les index et les requêtes DML confidentielles utilisant des enclaves sont uniquement prises en charge sur les colonnes prenant en charge les enclaves qui utilisent le chiffrement aléatoire. Le chiffrement déterministe n’est pas pris en charge.
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.
Commandes DBCC utilisant des enclaves sécurisées
Les commandes administratives DBCC (Transact-SQL) qui impliquent la vérification de l'intégrité des index peuvent également nécessiter des enclaves sécurisées si la base de données contient des index sur des colonnes activées par l'enclave et utilisant un chiffrement aléatoire. Par exemple, DBCC CHECKDB (Transact-SQL) et DBCC CHECKTABLE (Transact-SQL).
Prérequis pour l’exécution d’instructions utilisant des enclaves sécurisées
Votre environnement doit répondre aux conditions suivantes pour prendre en charge l’exécution d’instructions utilisant une enclave sécurisée.
Votre instance SQL Server ou votre serveur de base de données dans Azure SQL Database doit être correctement configuré pour prendre en charge les enclaves et l'attestation, si applicable/exigé. Pour plus d’informations, consultez Configurer l’enclave sécurisée et l’attestation.
Lorsque vous vous connectez à votre base de données à partir d'une application ou d'un outil (comme SQL Server Management Studio), veillez à :
utiliser une version de pilote client ou une version d'outil qui prend en charge Always Encrypted avec des enclaves sécurisées.
- Reportez-vous à Développer des applications en utilisant Always Encrypted avec des enclaves sécurisées pour en savoir plus sur les pilotes client prenant en charge Always Encrypted avec des enclaves sécurisées.
- Reportez-vous aux sections suivantes pour en savoir plus sur les outils prenant en charge Always Encrypted avec des enclaves sécurisées.
Activer Always Encrypted pour la connexion à la base de données.
Spécifiez un protocole d'attestation, qui détermine si votre application ou votre outil doit attester l'enclave avant de soumettre des requêtes d'enclave, et quel service d'attestation il doit utiliser. La plupart des outils et des pilotes prennent en charge les protocoles d'attestation suivants :
- Microsoft Azure Attestation – met en œuvre l'attestation en utilisant Microsoft Azure Attestation.
- Service Guardian hôte – met en œuvre l'attestation en utilisant Service Guardian hôte.
- Aucun – autorise l'utilisation d'enclaves sans attestation.
La table ci-dessous indique les protocoles d'attestation valides pour des produits SQL et des technologies d'enclave particuliers :
Produit Technologie 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 Service Guardian hôte, aucun Azure SQL Database Enclaves SGX (dans les bases de données de série DC) Microsoft Azure Attestation Azure SQL Database Enclaves de sécurité basée sur la virtualisation Aucun(e)
Indiquez une URL d'attestation valide pour votre environnement si vous utilisez l'attestation.
- Si vous utilisez SQL Server et le service Guardian hôte (SGH), consultez Déterminer et partager l’URL d’attestation SGH.
- Si vous utilisez Azure SQL Database avec les enclaves Intel SGX et Microsoft Azure Attestation, reportez-vous à Déterminer l'URL d'attestation de votre stratégie d'attestation.
Prérequis pour l’exécution d’instructions T-SQL utilisant des enclaves dans SSMS
Téléchargez la dernière version de SQL Server Management Studio (SSMS).
Veillez à exécuter vos instructions à partir d'une fenêtre Requête qui utilise une connexion dont les paramètres Always Encrypted et attestation sont correctement configurés.
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>> et l'onglet Propriétés de la connexion. Indiquez le nom de votre base de données.
Sélectionnez l’onglet Always Encrypted.
Sélectionnez Activer Always Encrypted (chiffrement de colonne).
Sélectionnez Activer les enclaves sécurisées.
Définir Protocole sur :
- Service Guardian hôte si vous utilisez SQL Server.
- Microsoft Azure Attestation si vous utilisez Azure SQL Database avec les enclaves Intel SGX.
- Aucun si vous utilisez Azure SQL Database avec des enclaves de sécurité basée sur la virtualisation.
Spécifiez l'URL d'attestation de votre enclave. Non applicable lorsque le protocole est défini sur Aucun. Par exemple,
https://hgs.bastion.local/Attestation
ouhttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.Sélectionnez Connecter.
Si vous êtes invité à activer les requêtes Paramétrage pour Always Encrypted, sélectionnez Activer.
Pour en savoir plus, reportez-vous à Activation et désactivation d'Always Encrypted pour une connexion de base de données.
Prérequis pour l’exécution d’instructions T-SQL utilisant des enclaves dans Azure Data Studio
Il est recommandé d’utiliser au minimum la version 1.23 ou une version ultérieure. Veillez à exécuter vos instructions à partir d’une fenêtre de requête qui utilise une connexion sur laquelle vous avez activé Always Encrypted et correctement configuré le protocole et l’URL d’attestation.
Dans la boîte de dialogue Connexion, sélectionnez Avancé….
Pour activer Always Encrypted pour la connexion, définissez le champ Always Encrypted sur Activé.
Pour activer les enclaves sécurisées, définissez le champ Enclaves sécurisées sur Activé.
Spécifiez le protocole et l’URL d’attestation.
- Si vous utilisez SQL Server, définissez Protocole d'attestation sur Service Guardian hôte et saisissez l'URL d'attestation de votre Service Guardian hôte dans le champ URL d'attestation de l'enclave.
- Si vous utilisez une base de données de la série DC avec Intel SGX dans Azure SQL Database, définissez Protocole d'attestation sur Azure Attestation et entrez l'URL d'attestation, en faisant référence à votre stratégie dans Microsoft Azure Attestation dans le champ URL d'attestation d'enclave.
- Si vous utilisez une base de données avec des enclaves de sécurité basée sur la virtualisation activées dans Azure SQL Database, définissez le Protocole d'attestation sur Aucun.
Sélectionnez OK pour fermer les Propriétés avancées.
Pour en savoir plus, reportez-vous à Activation et désactivation d'Always Encrypted pour une connexion de base de données.
Si vous prévoyez d’exécuter des requêtes DML paramétrées, vous devez également activer le Paramétrage d’Always Encrypted.
Exemples
Cette section comprend des exemples de requêtes DML utilisant des enclaves.
Les exemples utilisent le schéma ci-dessous.
CREATE SCHEMA [HR];
GO
CREATE TABLE [HR].[Jobs](
[JobID] [int] IDENTITY(1,1) PRIMARY KEY,
[JobTitle] [nvarchar](50) NOT NULL,
[MinSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[MaxSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
);
GO
CREATE TABLE [HR].[Employees](
[EmployeeID] [int] IDENTITY(1,1) PRIMARY KEY,
[SSN] [char](11) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[JobID] [int] NULL,
FOREIGN KEY (JobID) REFERENCES [HR].[Jobs] (JobID)
);
GO
Recherche de correspondance exacte
La requête ci-dessous effectue une recherche de correspondance exacte sur la colonne de chaîne chiffrée SSN
.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Recherche avec des critères spéciaux
La requête ci-dessous effectue une recherche avec des critères spéciaux sur la colonne de chaîne chiffrée SSN
pour trouver les employés dont les quatre derniers chiffres du numéro de sécurité sociale (USA) correspondent aux chiffres spécifiés.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Comparaison de plage
La requête ci-dessous effectue une comparaison de plage sur la colonne chiffrée Salary
pour trouver les employés dont le salaire se trouve dans la plage spécifiée.
DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO
Joins
La requête ci-dessous effectue une jointure entre les tables Employees
et Jobs
à l’aide de la colonne Salary
chiffrée. La requête récupère les employés dont le salaire est en dehors d’une plage de salaires pour le travail de l’employé.
SELECT * FROM [HR].[Employees] e
JOIN [HR].[Jobs] j
ON e.[JobID] = j.[JobID] AND e.[Salary] > j.[MaxSalary] OR e.[Salary] < j.[MinSalary];
GO
Tri
La requête ci-dessous trie les enregistrements d’employés en fonction de la colonne chiffrée Salary
pour récupérer les 10 employés les mieux payés.
Remarque
Le tri de colonnes chiffrées est pris en charge dans SQL Server 2022 (16.x) et Azure SQL Database, mais pas dans SQL Server 2019 (15.x).
SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO
Étapes suivantes
Voir aussi
- Résoudre les problèmes courants concernant Always Encrypted avec enclaves sécurisées
- Bien démarrer dans l’utilisation d’Always Encrypted avec enclaves sécurisées
- Configurer le chiffrement de colonne sur place en utilisant Always Encrypted avec enclaves sécurisées
- Créer et utiliser des index sur des colonnes à l’aide d’Always Encrypted avec enclaves sécurisées