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 vous explique comment commencer à utiliser Always Encrypted avec des enclaves sécurisées dans SQL Server. Il vous montre comment :

  • 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 savoir comment configurer Always Encrypted avec enclaves sécurisées à l’aide du service Guardian hôte pour l’attestation d’enclave, consultez Tutoriel : Prise en main d’Always Encrypted avec enclaves sécurisées dans SQL Server avec attestation à l’aide de HGS

Prerequisites

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 version ultérieure.
  • 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 :
  • 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

  1. Connectez-vous à votre ordinateur SQL Server en tant qu’administrateur, ouvrez une console Windows PowerShell avec élévation de privilèges 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.

    Screenshot of the System Information virtualization-based security details.

  2. 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
    
  3. 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
    
  4. Redémarrez à nouveau l’ordinateur SQL Server pour que VBS soit disponible en ligne.

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

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

    1. Démarrer SSMS.

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

    3. Sélectionnez Options >>, puis l’onglet Always Encrypted.

    4. Assurez-vous que la case Activer Always Encrypted (chiffrement de colonne) n’est pas cochée.

      Screenshot of the SSMS connection option for Always Encrypted disabled.

    5. Sélectionnez Se connecter.

  2. Ouvrez une nouvelle fenêtre de requête et exécutez l’instruction ci-dessous pour définir le type d’enclave sécurisé sur la sécurité basée sur la virtualisation (VBS).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. 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.

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

    nom value 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.

  1. À 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];
    
  2. 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];
    
  3. 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.

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

  2. Provisionnez une nouvelle clé principale de colonne prenant en charge les enclaves :

    1. Cliquez avec le bouton droit sur Clés Always Encrypted et sélectionnez Nouvelle clé principale de colonne... .

    2. Sélectionnez le nom de votre clé principale de colonne : CMK1.

    3. Veillez à sélectionnez Magasin de certificats Windows (utilisateur actuel ou ordinateur local) ou Azure Key Vault.

    4. Sélectionnez Autoriser les calculs d’enclave.

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

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

    7. Cliquez sur OK.

      Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.

  3. Créez une clé de chiffrement de colonne prenant en charge les enclaves :

    1. Cliquez avec le bouton droit sur Clés Always Encrypted et sélectionnez Nouvelle clé de chiffrement de colonne.
    2. Entrez un nom pour la nouvelle clé de chiffrement de colonne : CEK1.
    3. 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.
    4. 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.

  1. Ouvrez une nouvelle instance SSMS et connectez-vous à votre instance SQL Server avec Always Encrypted activé pour la connexion de base de données.

    1. Démarrez une nouvelle instance SSMS.

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

    3. Sélectionnez Options >>, puis l’onglet Always Encrypted.

    4. Cochez la case Activer Always Encrypted (chiffrement de colonne).

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

    6. Définissez Protocole sur Aucun.

      Screenshot of the connect to server Always Encrypted tab without attestation using SSMS.

    7. Sélectionnez Connecter.

    8. Si vous êtes invité à activer les requêtes Paramétrage pour Always Encrypted, sélectionnez Activer.

  2. 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;
    

    Note

    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.

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

  1. Dans l’instance SSMS avec Always Encrypted activé, vérifiez que Paramétrage pour Always Encrypted est également activé.

    1. Sélectionnez Outils dans le menu principal de SSMS.
    2. Sélectionnez Options... .
    3. Accédez à Exécution de la requête>SQL Server>Avancé.
    4. Vérifiez que la case Activer Paramétrage pour Always Encrypted est cochée.
    5. Cliquez sur OK.
  2. 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;
    
  3. 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 :

Voir aussi