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 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 :

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.

    • 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 Aucune
  • Indiquez une URL d'attestation valide pour votre environnement si vous utilisez l'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.

  1. 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.

  2. Sélectionnez Options>> et l'onglet Propriétés de la connexion. Indiquez le nom de votre base de données.

  3. Sélectionnez l’onglet Always Encrypted.

  4. Sélectionnez Activer Always Encrypted (chiffrement de colonne).

  5. Sélectionnez Activer les enclaves sécurisées.

  6. Définir Protocole sur :

    1. Service Guardian hôte si vous utilisez SQL Server.
    2. Microsoft Azure Attestation si vous utilisez Azure SQL Database avec les enclaves Intel SGX.
    3. Aucun si vous utilisez Azure SQL Database avec des enclaves de sécurité basée sur la virtualisation.
  7. 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 ou https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.

    Se connecter au serveur avec une attestation à l’aide de SSMS

  8. Sélectionnez Se connecter.

  9. 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.

  1. Dans la boîte de dialogue Connexion, sélectionnez Avancé….

  2. Pour activer Always Encrypted pour la connexion, définissez le champ Always Encrypted sur Activé.

  3. Pour activer les enclaves sécurisées, définissez le champ Enclaves sécurisées sur Activé.

  4. 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.

    Se connecter au serveur avec une attestation à l’aide d’Azure Data Studio

  5. 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

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

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