Utiliser le connecteur SQL Server avec les fonctionnalités de chiffrement SQL

S’applique à :SQL Server

Les activités de chiffrement SQL Server courantes à l'aide d'une clé asymétrique protégée par Azure Key Vault incluent les trois domaines suivants.

  • Chiffrement TDE (Transparent Data Encryption) à l’aide d’une clé asymétrique dans Azure Key Vault

  • Chiffrement des sauvegardes à l'aide d'une clé asymétrique du coffre de clés

  • Chiffrement au niveau colonne à l’aide d’une clé asymétrique dans le coffre de clés

Exécutez les parties I à IV de la rubrique Étapes de la configuration de la gestion de clés extensible à l’aide d’Azure Key Vaultavant de suivre les étapes de cette rubrique.

Remarque

Les versions 1.0.0.440 et antérieures ont été remplacées et ne sont plus prises en charge dans les environnements de production. Effectuez la mise à niveau vers la version 1.0.1.0 ou ultérieure en accédant au Centre de téléchargement Microsoft et en utilisant les instructions fournies dans la page Résolution des problèmes et maintenance du connecteur SQL Server sous « Mise à niveau du connecteur SQL Server ».

Remarque

Microsoft Entra ID était anciennement appelé Azure Active Directory (Azure AD).

Chiffrement TDE (Transparent Data Encryption) à l’aide d’une clé asymétrique dans Azure Key Vault

Une fois les parties I à IV de la rubrique Étapes de la configuration de la gestion de clés extensible à l’aide d’Azure Key Vault terminées, utilisez la clé Azure Key Vault pour chiffrer la clé de chiffrement de base de données à l’aide du chiffrement TDE. Pour plus d’informations sur la rotation des clés à l’aide de PowerShell, consultez Effectuer une rotation du protecteur TDE (Transparent Data Encryption) à l’aide de PowerShell.

Important

Ne supprimez pas les versions précédentes de la clé après une substitution. Lorsque les clés sont substituées, certaines données sont toujours chiffrées avec les clés précédentes, comme les anciennes sauvegardes de base de données, les fichiers journaux de sauvegardes et de transactions.

Vous devez créer des informations d’identification et une connexion, puis créer une clé de chiffrement de base de données qui chiffre les données et les journaux dans la base de données. Pour chiffrer une base de données, l’autorisation CONTROL sur la base de données est exigée. Le graphique suivant montre la hiérarchie de la clé de chiffrement lors de l’utilisation du coffre Azure Key Vault.

Diagram showing the hierarchy of the encryption key when using the Azure Key Vault.

  1. Créer des identifiants SQL Server pour le moteur de base de données à utiliser pour le chiffrement TDE

    Le moteur de base de données utilise les identifiants de l'application Microsoft Entra pour accéder au coffre de clés lors du chargement de la base de données. Nous vous recommandons de créer un autre ID client et un autre Secret, comme décrit à l'Étape 1, pour le moteur de base de données, afin de limiter les autorisations de coffre de clés accordées.

    Modifiez le script Transact-SQL ci-dessous comme suit :

    • Modifiez l’argument IDENTITY (ContosoDevKeyVault) de sorte qu’il pointe vers votre coffre Azure Key Vault.

      • Si vous utilisez Azure global, remplacez l’argument IDENTITY par le nom de votre coffre Azure Key Vault de la Partie II.
      • Si vous utilisez un cloud Azure privé (par exemple Azure Government, Azure opéré par 21Vianet, ou Azure Germany), remplacez l'argument IDENTITY par l'URI du coffre renvoyée à l'étape 3 de la Partie II. N’incluez pas « https:// » dans l’URI du coffre.
    • Remplacez la première partie de l'argument SECRET par l'ID client de l'application Microsoft Entra de l'Étape 1. Dans cet exemple, l’ID client est EF5C8E094D2A4A769998D93440D8115D.

      Important

      Vous devez supprimer les tirets de l’ ID client.

    • Complétez la deuxième partie de l’argument SECRET avec la Clé secrète client mentionnée dans la Partie 1. Dans cet exemple, la clé secrète client de la Partie 1 est ReplaceWithAADClientSecret.

    • La chaîne finale pour l’argument SECRET est une longue séquence de lettres et de chiffres, sans tirets.

    USE master;  
    CREATE CREDENTIAL Azure_EKM_TDE_cred   
        WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret'   
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;  
    
  2. Créer un compte de connexion SQL Server pour le moteur de base de données pour TDE

    Créez un compte de connexion SQL Server et ajoutez-lui les identifiants mentionnés à l'étape 1. Cet exemple Transact-SQL utilise la même clé que celle importée précédemment.

    USE master;  
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it loads a database   
    -- encrypted by TDE.  
    CREATE LOGIN TDE_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY;  
    GO   
    
    -- Alter the TDE Login to add the credential for use by the   
    -- Database Engine to access the key vault  
    ALTER LOGIN TDE_Login   
    ADD CREDENTIAL Azure_EKM_TDE_cred ;  
    GO  
    
  3. Créer la clé de chiffrement de base de données (DEK)

    La clé DEK chiffre vos données et vos fichiers journaux dans l’instance de base de données et est, à son tour, chiffrée par la clé asymétrique Azure Key Vault. La clé de chiffrement de base de données peut être créée à l'aide de n'importe quelle longueur de clé ou algorithme pris en charge par SQL Server.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. Activer le chiffrement TDE

    -- Alter the database to enable transparent data encryption.  
    ALTER DATABASE ContosoDatabase   
    SET ENCRYPTION ON;  
    GO  
    

    À l'aide de Management Studio, vérifiez que le chiffrement TDE a été activé en vous connectant à votre base de données avec l'Explorateur d'objets. Cliquez avec le bouton droit sur votre base de données, pointez sur Tâches, puis cliquez sur Gérer le chiffrement de base de données.

    Screenshot showing Object Explorer with Tasks > Manage Database Encryption selected.

    Dans la boîte de dialogue Gérer le chiffrement de base de données , vérifiez que le chiffrement TDE est activé et quelle clé asymétrique chiffre la clé DEK.

    Screenshot of the Manage Database Encryption dialog box with the Set Database Encryption On option selected and a yellow banner that says Now TDE is turned on.

    Vous pouvez aussi exécuter le script Transact-SQL suivant. Un état de chiffrement de 3 indique une base de données.

    USE MASTER  
    SELECT * FROM sys.asymmetric_keys  
    
    -- Check which databases are encrypted using TDE  
    SELECT d.name, dek.encryption_state   
    FROM sys.dm_database_encryption_keys AS dek  
    JOIN sys.databases AS d  
         ON dek.database_id = d.database_id;  
    

    Remarque

    La base de données tempdb est chiffrée automatiquement chaque fois qu’une base de données permet le chiffrement TDE.

Chiffrement des sauvegardes à l'aide d'une clé asymétrique du coffre de clés

Les sauvegardes chiffrées sont prises en charge à partir de SQL Server 2014 (12.x). L'exemple suivant crée et restaure une sauvegarde chiffrée avec une clé de chiffrement de données protégée par la clé asymétrique dans le coffre de clés.
Le moteur de base de données utilise les identifiants de l'application Microsoft Entra pour accéder au coffre de clés lors du chargement de la base de données. Nous vous recommandons de créer un autre ID client et un autre Secret, comme décrit à l'Étape 1, pour le moteur de base de données, afin de limiter les autorisations de coffre de clés accordées.

  1. Créer des informations d’identification SQL Server pour le moteur de base de données à utiliser pour le chiffrement de sauvegarde

    Modifiez le script Transact-SQL ci-dessous comme suit :

    • Modifiez l’argument IDENTITY (ContosoDevKeyVault) de sorte qu’il pointe vers votre coffre Azure Key Vault.

      • Si vous utilisez Azure global, remplacez l’argument IDENTITY par le nom de votre coffre Azure Key Vault de la Partie II.
      • Si vous utilisez un cloud Azure privé (par exemple Azure Government, Microsoft Azure opéré par 21Vianet, ou Azure Germany), remplacez l'argument IDENTITY par l'URI du coffre renvoyée à l'étape 3 de la Partie II. N’incluez pas « https:// » dans l’URI du coffre.
    • Remplacez la première partie de l'argument SECRET par l'ID client de l'application Microsoft Entra de l'Étape 1. Dans cet exemple, l’ID client est EF5C8E094D2A4A769998D93440D8115D.

      Important

      Vous devez supprimer les tirets de l’ ID client.

    • Complétez la deuxième partie de l’argument SECRET avec la clé secrète client mentionnée dans la Partie I. Dans cet exemple, la clé secrète client de la Partie I est Replace-With-AAD-Client-Secret. La chaîne finale pour l’argument SECRET est une longue séquence de lettres et de chiffres, sans tirets.

      USE master;  
      
      CREATE CREDENTIAL Azure_EKM_Backup_cred   
          WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
          SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret'   
      FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;    
      
  2. Créer un compte de connexion SQL Server pour le moteur de base de données à utiliser pour le chiffrement de sauvegarde

    Créez un compte de connexion SQL Server utilisable par le moteur de base de données pour les sauvegardes chiffrées, et ajoutez-lui les identifiants mentionnés à l'étape 1. Cet exemple Transact-SQL utilise la même clé que celle importée précédemment.

    Important

    Vous ne pouvez pas utiliser la même clé asymétrique pour le chiffrement de sauvegarde si vous avez déjà utilisé cette clé pour le chiffrement TDE (l'exemple ci-dessus) ou pour le chiffrement au niveau des colonnes (l'exemple suivant).

    Cet exemple utilise la clé asymétrique CONTOSO_KEY_BACKUP stockée dans le coffre de clés, qui peut être préalablement importée ou créée pour la base de données MASTER, comme décrit à l’étape 5 de la Partie IV.

    USE master;  
    
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it is encrypting the backup.  
    CREATE LOGIN Backup_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP;  
    GO   
    
    -- Alter the Encrypted Backup Login to add the credential for use by   
    -- the Database Engine to access the key vault  
    ALTER LOGIN Backup_Login   
    ADD CREDENTIAL Azure_EKM_Backup_cred ;  
    GO  
    
  3. Sauvegarder la base de données

    Sauvegardez le chiffrement spécifiant la spécification de base de données avec la clé asymétrique stockée dans le coffre de clés.

    Dans l’exemple ci-dessous, notez que si la base de données a déjà été chiffrée avec TDE et que la clé asymétrique CONTOSO_KEY_BACKUP est différente de la clé asymétrique TDE, la sauvegarde sera chiffrée à la fois par la clé asymétrique TDE et par CONTOSO_KEY_BACKUP. L'instance SQL Server cible aura besoin des deux clés pour déchiffrer la sauvegarde.

    USE master;  
    
    BACKUP DATABASE [DATABASE_TO_BACKUP]  
    TO DISK = N'[PATH TO BACKUP FILE]'   
    WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,   
    ENCRYPTION(ALGORITHM = AES_256,   
    SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]);  
    GO  
    
  4. Restaurer la base de données

    Pour restaurer une sauvegarde de base de données chiffrée avec TDE, l'instance SQL Server cible doit tout d'abord avoir une copie de la clé asymétrique du coffre de clés utilisée pour le chiffrement. Voici comment procéder :

    • Si la clé asymétrique d’origine utilisée pour le chiffrement TDE n’est plus dans Key Vault, restaurez la sauvegarde de clé Key Vault ou réimportez la clé à partir d’un module HSM local. Important : Pour que l’empreinte numérique de la clé corresponde à celle enregistrée dans la sauvegarde de base de données, la clé doit avoir le même nom que la clé Key Vault, comme c’était le cas initialement.

    • Appliquez les étapes 1 et 2 sur l'instance SQL Server cible.

    • Une fois que l'instance SQL Server cible a accès à la ou aux clés asymétriques utilisées pour chiffrer la sauvegarde, restaurez la base de données sur le serveur.

    Exemple de code de restauration :

    RESTORE DATABASE [DATABASE_TO_BACKUP]  
    FROM DISK = N'[PATH TO BACKUP FILE]'   
        WITH FILE = 1, NOUNLOAD, REPLACE;  
    GO  
    

    Pour plus d’informations sur les options de sauvegarde, consultez BACKUP (Transact-SQL).

Chiffrement au niveau colonne à l’aide d’une clé asymétrique dans le coffre de clés

L'exemple suivant crée une clé symétrique protégée par la clé asymétrique dans le coffre de clés. La clé symétrique est ensuite utilisée pour chiffrer les données de la base de données.

Important

Vous ne pouvez pas utiliser la même clé asymétrique pour le chiffrement au niveau des colonnes si vous avez déjà utilisé cette clé pour le chiffrement de sauvegarde.

Cet exemple utilise la clé asymétrique CONTOSO_KEY_COLUMNS stockée dans le coffre de clés, qui peut être préalablement importée ou créée, comme décrit à l’étape 3 de la Partie II de la rubrique Étapes de la configuration de la gestion de clés extensible à l’aide d’Azure Key Vault. Pour utiliser cette clé asymétrique dans la base de données ContosoDatabase , vous devez réexécuter l’instruction CREATE ASYMMETRIC KEY pour fournir à la base de données ContosoDatabase avec une référence à la clé.

USE [ContosoDatabase];  
GO  
  
-- Create a reference to the key in the key vault  
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS   
FROM PROVIDER [AzureKeyVault_EKM_Prov]  
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',  
CREATION_DISPOSITION = OPEN_EXISTING;  
  
-- Create the data encryption key.  
-- The data encryption key can be created using any SQL Server   
-- supported algorithm or key length.  
-- The DEK will be protected by the asymmetric key in the key vault  
  
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY  
    WITH ALGORITHM=AES_256  
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
DECLARE @DATA VARBINARY(MAX);  
  
--Open the symmetric key for use in this session  
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY   
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
--Encrypt syntax  
SELECT @DATA = ENCRYPTBYKEY  
    (  
    KEY_GUID('DATA_ENCRYPTION_KEY'),   
    CONVERT(VARBINARY,'Plain text data to encrypt')  
    );  
  
-- Decrypt syntax  
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));  
  
--Close the symmetric key  
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;  

Voir aussi

Étapes de la configuration de la gestion de clés extensible à l’aide d’Azure Key Vault
Gestion de clés extensible à l’aide d’Azure Key Vault
Fournisseur EKM activé (option de configuration de serveur)
Résolution des problèmes et maintenance du connecteur SQL Server