Gebruik SQL Server Connector met SQL-encryptiefuncties

van toepassing op:SQL Server-

Veelvoorkomende SQL Server-encryptieactiviteiten die gebruikmaken van een asymmetrische sleutel die door Azure Key Vault wordt beschermd, vallen onder de volgende drie gebieden:

  • Transparante data-encryptie (TDE) door gebruik te maken van een asymmetrische sleutel uit Azure Key Vault.
  • Back-ups versleutelen met behulp van een asymmetrische sleutel uit de sleutelkluis.
  • Kolomniveau-encryptie door gebruik te maken van een asymmetrische sleutel uit de sleutelkluis.

Voltooi de stappen 1 tot en met 4 van Set up Transparent Data Encryption met Azure Key Vault voor SQL Server voordat je de stappen in dit artikel volgt.

Notitie

Versies 1.0.0.440 en eerder zijn vervangen en worden niet langer ondersteund in productieomgevingen. Werk bij naar versie 1.0.1.0 of later. Download de huidige versie van het Microsoft Downloadcentrum en volg de instructies in de sectie "Upgrade van SQL Server Connector" van SQL Server Connector onderhoud en probleemoplossing.

Notitie

Microsoft Entra ID voorheen Azure Active Directory (Azure AD) werd genoemd.

Transparante data-encryptie door gebruik te maken van een asymmetrische sleutel uit Azure Key Vault

Nadat je stappen 1 tot en met 4 hebt voltooid van Set up Transparent Data Encryption met Azure Key Vault voor SQL Server, gebruik je de Azure Key Vault-sleutel om de database-encryptiesleutel te versleutelen met TDE. Voor meer informatie over het roteren van sleutels met PowerShell, zie De beveiliging van Transparent Data Encryption (TDE) roteren met PowerShell.

Belangrijk

Verwijder eerdere versies van de sleutel niet na een rollover. Wanneer sleutels rouleren, blijft sommige gegevens versleuteld met de vorige sleutels, zoals oudere database-back-ups, back-up-logbestanden en transactielogbestanden.

Je moet een credential en een login aanmaken, en een database-encryptiesleutel maken die de data en logs in de database versleutelt. Het versleutelen van een database vereist CONTROL machtiging voor de database. De volgende afbeelding toont de hiërarchie van de encryptiesleutel wanneer je Azure Key Vault gebruikt.

Diagram dat de hiërarchie van de encryptiesleutel toont bij gebruik van de Azure Key Vault.

  1. Een SQL Server-referentie maken voor de database-engine die moet worden gebruikt voor TDE-

    De Database Engine gebruikt de Microsoft Entra-applicatiegegevens om tijdens het laden van de database toegang te krijgen tot de key vault. Om de door jou verleende sleutelkluisrechten te beperken, maak je een andere Client ID en Secret aan, zoals beschreven in Stap 1: Het verificatiemodel instellen, voor de Database Engine.

    Wijzig het Transact-SQL script hieronder op de volgende manieren:

    • Bewerk het argument IDENTITY (ContosoDevKeyVault) om naar uw Azure Key Vault te verwijzen.

      • Als u globale Azure gebruikt, vervangt u het IDENTITY argument door de naam van uw Azure Key Vault uit stap 2: Een sleutelkluis maken.
      • Als je een privé Azure-cloud gebruikt, bijvoorbeeld Azure Government, Azure beheerd door 21Vianet, of Azure Duitsland, vervang dan het IDENTITY-argument door de Vault-URI die wordt geretourneerd in Een sleutelkluis en sleutel maken met PowerShell. Neem https:// niet op in de sleutelkluis-URI.
    • Vervang het eerste deel van het SECRET argument door de Microsoft Entra applicatie Client ID uit Stap 1: Het authenticatiemodel opzetten. In dit voorbeeld is de client-IDEF5C8E094D2A4A769998D93440D8115D.

      Belangrijk

      U moet de afbreekstreepjes uit de client-idverwijderen.

    • Vul het tweede deel van het SECRET-argument in met het Client Secret uit stap 1. In dit voorbeeld is het Client SecretReplaceWithAADClientSecret.

    • De laatste string voor het SECRET argument is een lange reeks letters en cijfers, zonder koppeltekens.

    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. Een SQL Server-aanmelding maken voor de Database Engine voor TDE-

    Maak een SQL Server-aanmelding en voeg de referentie uit stap 1 eraan toe. In dit Transact-SQL voorbeeld wordt dezelfde sleutel gebruikt die eerder is geïmporteerd.

    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. Maak de database-encryptiesleutel (DEK) aan

    De DEK versleutelt je gegevens en logbestanden in de database-instantie, en wordt op zijn beurt versleuteld door de asymmetrische sleutel van Azure Key Vault. Je kunt de DEK maken door elk algoritme of sleutellengte te gebruiken die SQL Server ondersteunt.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. Zet TDE aan

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

    Controleer met Management Studio of TDE is ingeschakeld door verbinding te maken met je database via Objectverkenner. Klik met de rechtermuisknop op je database, wijs naar Taken en selecteer vervolgens Database-encryptie beheren.

    schermopname van Objectverkenner met Taken > Databaseversleuteling beheren geselecteerd. ekm-tde-object-explorer

    Controleer in het dialoogvenster Databaseversleuteling beheren of TDE is ingeschakeld en welke asymmetrische sleutel de DEK versleutelt.

    nl-NL: Schermopname van het dialoogvenster Databaseversleuteling beheren met de optie Databaseversleuteling inschakelen geselecteerd en een gele banner met de melding: Nu is TDE ingeschakeld.

    U kunt ook het volgende Transact-SQL script uitvoeren. Een versleutelingsstatus van 3 geeft een versleutelde database aan.

    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;  
    

    Notitie

    De tempdb-database wordt automatisch versleuteld wanneer een database TDE inschakelt.

Back-ups versleutelen met behulp van een asymmetrische sleutel uit de sleutelkluis

Versleutelde back-ups worden ondersteund vanaf SQL Server 2014 (12.x). Het volgende voorbeeld maakt een back-up aan en herstelt een back-up die is versleuteld met een data-encryptiesleutel die door de asymmetrische sleutel in de sleutelkluis wordt beschermd.

De Database Engine gebruikt de Microsoft Entra-applicatiegegevens om tijdens het laden van de database toegang te krijgen tot de Key Vault. Om de door jou verleende sleutelkluisrechten te beperken, maak je een andere Client ID en Secret aan, zoals beschreven in Stap 1: Het verificatiemodel instellen, voor de Database Engine.

  1. Maak een SQL Server-credential aan voor de Database Engine om te gebruiken voor back-upencryptie

    Wijzig het Transact-SQL script hieronder op de volgende manieren:

    • Bewerk het argument IDENTITY (ContosoDevKeyVault) om naar uw Azure Key Vault te verwijzen.

      • Als u globale Azure gebruikt, vervangt u het IDENTITY argument door de naam van uw Azure Key Vault uit stap 2: Een sleutelkluis maken.
      • Als je een privé Azure-cloud gebruikt, bijvoorbeeld Azure Government, Microsoft Azure dat wordt beheerd door 21Vianet, of Azure Duitsland, vervang dan het IDENTITY argument door de Vault-URI die wordt teruggegeven in Create a key vault and key by using PowerShell. Neem https:// niet op in de sleutelkluis-URI.
    • Vervang het eerste deel van het SECRET argument door de Microsoft Entra applicatie Client ID uit Stap 1: Het authenticatiemodel opzetten. In dit voorbeeld is de client-IDEF5C8E094D2A4A769998D93440D8115D.

      Belangrijk

      U moet de afbreekstreepjes uit de client-idverwijderen.

    • Vul het tweede deel van het SECRET argument in met het Client Secret uit stap 1. In dit voorbeeld is de Client SecretReplace-With-AAD-Client-Secret. De laatste string voor het SECRET argument is een lange reeks letters en cijfers, zonder koppeltekens.

      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. Maak een SQL Server-login aan voor de Database Engine voor back-upversleuteling

    Maak een SQL Server-aanmelding die moet worden gebruikt door de database-engine voor versleutelingsback-ups en voeg de referentie uit stap 1 eraan toe. In dit Transact-SQL voorbeeld wordt dezelfde sleutel gebruikt die eerder is geïmporteerd.

    Belangrijk

    Je kunt dezelfde asymmetrische sleutel niet gebruiken voor back-upencryptie als je die sleutel al hebt gebruikt voor TDE (het voorgaande voorbeeld), of kolomniveau-encryptie (het volgende voorbeeld).

    Dit voorbeeld gebruikt de CONTOSO_KEY_BACKUP asymmetrische sleutel die in de sleutelkluis is opgeslagen, die je eerder hebt geïmporteerd of aangemaakt voor de master database, zoals beschreven in Stap 2: Maak een sleutelkluis aan.

    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. Maak een back-up van de database

    Maak een back-up van de database en specificeer encryptie met de asymmetrische sleutel die in de sleutelkluis is opgeslagen.

    In het volgende voorbeeld wordt opgemerkt dat als de database al met TDE was versleuteld, en de asymmetrische sleutel CONTOSO_KEY_BACKUP verschilt van de TDE-asymmetrische sleutel, de back-up wordt versleuteld door zowel de TDE-asymmetrische sleutel als CONTOSO_KEY_BACKUP. De doel-SQL Server-instantie heeft beide sleutels nodig om de back-up te ontsleutelen.

    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. Herstel de database

    Om een database-back-up te herstellen die met TDE is versleuteld, moet de doel-SQL Server-instantie eerst een kopie hebben van de asymmetrische sleutelkluissleutel die voor de encryptie wordt gebruikt. Om die kopie te verstrekken:

    • Als de oorspronkelijke asymmetrische sleutel die voor TDE is gebruikt niet langer in de sleutelkluis zit, herstel dan de back-up van de sleutel uit de sleutelkluis of importeer de sleutel opnieuw vanaf een lokale HSM. Om de duimafdruk van de sleutel te laten overeenkomen met de duimafdruk die op de database-back-up is vastgelegd, moet de sleutel dezelfde naam van de sleutelkluissleutel gebruiken als oorspronkelijk.

    • Pas stap 1 en 2 toe op de doel-SQL Server-instantie.

    • Nadat de doel-SQL Server-instantie toegang heeft tot de asymmetrische sleutels die worden gebruikt om de back-up te versleutelen, herstelt u de database op de server.

    Voorbeeld van herstelcode:

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

    Zie (Transact-SQL) voor meer informatie over back-upoptiesBACKUP.

Kolomniveau-encryptie door gebruik te maken van een asymmetrische sleutel uit de sleutelkluis

In het volgende voorbeeld wordt een symmetrische sleutel gemaakt die wordt beveiligd door de asymmetrische sleutel in de sleutelkluis. De symmetrische sleutel versleutelt vervolgens de gegevens in de database.

Belangrijk

Je kunt dezelfde asymmetrische sleutel niet gebruiken voor kolomniveau-encryptie als je die sleutel al voor back-upencryptie hebt gebruikt.

Dit voorbeeld gebruikt de CONTOSO_KEY_COLUMNS asymmetrische sleutel die in de sleutelkluis is opgeslagen, die je eerder kunt importeren of aanmaken, zoals beschreven in Stap 2: Maak een sleutelkluis aan. Om deze asymmetrische sleutel in de ContosoDatabase database te gebruiken, voer je de CREATE ASYMMETRIC KEY instructie opnieuw uit om de ContosoDatabase database een referentie naar de sleutel te geven.

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;