Använd SQL Server Connector med SQL-krypteringsfunktioner

gäller för:SQL Server

Vanliga krypteringsaktiviteter för SQL Server som använder en asymmetrisk nyckel skyddad av Azure Key Vault faller inom följande tre områden:

  • Transparent datakryptering (TDE) genom att använda en asymmetrisk nyckel från Azure Key Vault.
  • Kryptering av säkerhetskopior med en asymmetrisk nyckel från nyckelvalvet.
  • Kolumnnivåkryptering genom att använda en asymmetrisk nyckel från nyckelvalvet.

Slutför stegen 1 till 4 i Sätt upp Transparent Data Encryption med Azure Key Vault för SQL Server innan du följer stegen i denna artikel.

Notera

Versionerna 1.0.0.440 och tidigare ersätts och stöds inte längre i produktionsmiljöer. Uppgradera till version 1.0.1.0 eller senare. Ladda ner den aktuella versionen från Microsoft Download Center och följ instruktionerna i avsnittet "Upgrade of SQL Server Connector" i SQL Server Connector-underhåll och felsökning.

Notera

Microsoft Entra ID tidigare kallades Azure Active Directory (Azure AD).

Transparent datakryptering genom att använda en asymmetrisk nyckel från Azure Key Vault

Efter att du har slutfört steg 1 till 4 i Set up Transparent Data Encryption with Azure Key Vault for SQL Server, använd Azure Key Vault-nyckeln för att kryptera databasens krypteringsnyckel med TDE. För mer information om att rotera nycklar med PowerShell, se Rotera Transparent Data Encryption-skyddet (TDE) med PowerShell.

Viktig

Ta inte bort tidigare versioner av nyckeln efter en förnyelse. När nycklar rullas över är viss data fortfarande krypterad med de tidigare nycklarna, såsom äldre databasbackuper, säkerhetskopierade loggfiler och transaktionsloggfiler.

Du behöver skapa en autentiseringsuppgift och en inloggningsuppgift, samt skapa en databaskrypteringsnyckel som krypterar data och loggarna i databasen. Att kryptera en databas kräver behörighet för CONTROL. Följande grafik visar hierarkin för krypteringsnyckeln när du använder Azure Key Vault.

Diagram som visar hierarkin för krypteringsnyckeln när man använder Azure Key Vault.

  1. Skapa en SQL Server-autentiseringsuppgift som databasmotorn ska använda för TDE-

    Database Engine använder Microsoft Entra-applikationens inloggningsuppgifter för att komma åt nyckelvalvet under databasladdning. För att begränsa de nyckelvalvsbehörigheter du ger, skapa ett annat klient-ID och en hemlighet, som beskrivs i Steg 1: Sätt upp autentiseringsmodellen för Database Engine.

    Ändra Transact-SQL skriptet nedan på följande sätt:

    • Redigera argumentet IDENTITY (ContosoDevKeyVault) för att peka på ditt Azure Key Vault.

    • Ersätt den första delen av argumentet SECRET med Microsoft Entra-applikationens klient-ID från Steg 1: Sätt upp autentiseringsmodellen. I det här exemplet är Klient-IDEF5C8E094D2A4A769998D93440D8115D.

      Viktig

      Du måste ta bort bindestrecken från klient-ID.

    • Slutför den andra delen av argumentet SECRET med Client Secret från steg 1. I detta exempel är ReplaceWithAADClientSecret.

    • Den sista strängen för argumentet SECRET är en lång sekvens av bokstäver och siffror, utan bindestreck.

    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. Skapa en SQL Server-inloggning för databasmotorn för TDE

    Skapa en SQL Server-inloggning och lägg till autentiseringsuppgifterna från steg 1 till den. I det här Transact-SQL exemplet används samma nyckel som importerades tidigare.

    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. Skapa databasens krypteringsnyckel (DEK)

    DEK krypterar dina data och loggfiler i databasinstansen, och krypteras i sin tur av den asymmetriska nyckeln i Azure Key Vault. Du kan skapa DEK genom att använda vilken algoritm eller nyckellängd som helst som SQL Server stödjer.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. Slå på TDE

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

    Med Management Studio, kontrollera att TDE är aktiverat genom att ansluta till din databas med Object Explorer. Högerklicka på din databas, peka på Tasks och välj sedan Hantera databaskryptering.

    skärmbild som visar Object Explorer med Aktiviteter > Hantera databaskryptering markerat.

    I dialogrutan Hantera databaskryptering bekräftar du att TDE är aktiverat och vilken asymmetrisk nyckel som krypterar DEK.

    Skärmbild av dialogrutan Hantera databaskryptering med alternativet Ange databaskryptering på valt och en gul banderoll med texten Nu är TDE aktiverat.

    Du kan också köra följande Transact-SQL skript. Krypteringstillståndet 3 anger en krypterad databas.

    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;  
    

    Notera

    Den tempdb databasen krypteras automatiskt när en databas aktiverar TDE.

Kryptering av säkerhetskopior med en asymmetrisk nyckel från nyckelvalvet

Krypterade säkerhetskopior stöds från och med SQL Server 2014 (12.x). Följande exempel skapar och återställer en backup krypterad med en datakrypteringsnyckel som den asymmetriska nyckeln i nyckelvalvet skyddar.

Database Engine använder Microsoft Entra-applikationens programautentiseringsuppgifter för att komma åt nyckelvalvet under databasladdning. För att begränsa de nyckelvalvsbehörigheter du ger, skapa ett annat klient-ID och en Secret, som beskrivs i Steg 1: Sätt upp autentiseringsmodellen för Database Engine.

  1. Skapa en SQL Server-autentiseringsuppgift för att Database Engine ska använda den för säkerhetskopieringskryptering

    Ändra Transact-SQL skriptet nedan på följande sätt:

    • Redigera argumentet IDENTITY (ContosoDevKeyVault) för att peka på ditt Azure Key Vault.

      • Om du använder globala Azureersätter du argumentet IDENTITY med namnet på ditt Azure Key Vault från steg 2: Skapa ett nyckelvalv.
      • Om du använder ett privat Azure-moln, till exempel Azure Government, Microsoft Azure som drivs av 21Vianet, eller Azure Germany, ersätt argumentet IDENTITY med Vault-URI:n som returneras i Create a key vault and key by using PowerShell. Inkludera inte https:// i nyckelvalvets URI.
    • Ersätt den första delen av argumentet SECRET med Microsoft Entra-applikationens klient-ID från Steg 1: Sätt upp autentiseringsmodellen. I det här exemplet är Klient-IDEF5C8E094D2A4A769998D93440D8115D.

      Viktig

      Du måste ta bort bindestrecken från klient-ID.

    • Slutför den andra delen av argumentet SECRET med klienthemligheten från steg 1. I detta exempel är Replace-With-AAD-Client-Secret. Den sista strängen för argumentet SECRET är en lång sekvens av bokstäver och siffror, utan bindestreck.

      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. Skapa en SQL Server-inloggning för Database Engine för säkerhetskopieringskryptering

    Skapa en SQL Server-inloggning som ska användas av databasmotorn för krypteringssäkerhetskopior och lägg till autentiseringsuppgifterna från steg 1 till den. I det här Transact-SQL exemplet används samma nyckel som importerades tidigare.

    Viktig

    Du kan inte använda samma asymmetriska nyckel för backupkryptering om du redan använt den nyckeln för TDE (föregående exempel), eller kolumnnivåkryptering (följande exempel).

    Detta exempel använder den asymmetriska nyckeln CONTOSO_KEY_BACKUP som lagras i nyckelvalvet och som du kan importera eller skapa för databasen master som du skapade tidigare, enligt beskrivningen i steg 2: Skapa ett nyckelvalv.

    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. Säkerhetskopiera databasen

    Säkerhetskopiera databasen och specificera kryptering med den asymmetriska nyckeln som lagras i nyckelvalvet.

    I följande exempel, notera att om databasen redan var krypterad med TDE, och den asymmetriska nyckeln CONTOSO_KEY_BACKUP skiljer sig från TDE:s asymmetriska nyckel, så krypteras backupen både av TDE:s asymmetriska nyckel och CONTOSO_KEY_BACKUP. Mål-SQL Server-instansen behöver båda nycklarna för att dekryptera backupen.

    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. Återställ databasen

    För att återställa en databasbackup som är krypterad med TDE måste målinstansen för SQL Server först ha en kopia av den asymmetriska nyckelvalvnyckeln som används för kryptering. För att tillhandahålla en kopia:

    • Om den ursprungliga asymmetriska nyckeln som användes för TDE inte längre finns i nyckelvalvet, återställ säkerhetskopian av nyckelvalvsnyckeln eller importera nyckeln igen från en lokal HSM. För att nyckelns tumavtryck ska matcha det som registrerats i databassäkerhetskopian måste nyckeln använda samma Key Vault-nyckelnamn som den ursprungligen hade.

    • Tillämpa steg 1 och 2 på den mål-SQL Server-instansen.

    • När den mål-SQL Server-instansen har tillgång till de asymmetriska nycklar som används för att kryptera backupen, återställ databasen på servern.

    Exempel på återställningskod:

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

    Mer information om säkerhetskopieringsalternativ finns i BACKUP (Transact-SQL).

Kolumnnivåkryptering genom att använda en asymmetrisk nyckel från nyckelvalvet

I följande exempel skapas en symmetrisk nyckel som skyddas av den asymmetriska nyckeln i nyckelvalvet. Den symmetriska nyckeln krypterar sedan data i databasen.

Viktig

Du kan inte använda samma asymmetriska nyckel för kolumnnivåkryptering om du redan använt den nyckeln för backupkryptering.

Detta exempel använder den asymmetriska nyckeln CONTOSO_KEY_COLUMNS som lagras i nyckelvalvet, som du tidigare har importerat eller skapat, som beskrivs i steg 2: Skapa ett nyckelvalv. För att använda denna asymmetriska nyckel i databasen ContosoDatabase , kör satsen CREATE ASYMMETRIC KEY igen för att ge ContosoDatabase databasen en referens till nyckeln.

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;