Verwenden Sie SQL Server Connector mit SQL-Verschlüsselungsfunktionen

Gilt für:SQL Server

Gängige SQL Server-Verschlüsselungsaktivitäten, die einen asymmetrischen Schlüssel verwenden, der durch Azure Key Vault geschützt ist, fallen in die folgenden drei Bereiche:

  • Transparente Datenverschlüsselung (TDE) unter Verwendung eines asymmetrischen Schlüssels aus Azure Key Vault.
  • Verschlüsselung von Backups mit einem asymmetrischen Schlüssel aus dem Schlüsseltresor.
  • Spaltenebenen-Verschlüsselung durch Verwendung eines asymmetrischen Schlüssels aus dem Schlüsseltresor.

Schließen Sie die Schritte 1 bis 4 der Einrichtung von Transparent Data Encryption mit Azure Key Vault für SQL Server ab, bevor Sie die Schritte in diesem Artikel befolgen.

Hinweis

Die Versionen 1.0.0.440 und früher wurden ersetzt und werden in Produktionsumgebungen nicht mehr unterstützt. Aktualisieren Sie auf Version 1.0.1.0 oder höher. Laden Sie die aktuelle Version aus dem Microsoft Download Center herunter und folgen Sie den Anweisungen im Abschnitt „Upgrade des SQL Server Connector“ in SQL Server Connector – Wartung und Problembehandlung.

Hinweis

Microsoft Entra ID war bisher unter Azure Active Directory (Azure AD) bekannt.

Transparente Datenverschlüsselung durch Verwendung eines asymmetrischen Schlüssels aus Azure Key Vault

Nachdem Sie die Schritte 1 bis 4 von Einrichten der transparenten Datenverschlüsselung mit Azure Key Vault für SQL Server abgeschlossen haben, verwenden Sie den Azure Key Vault-Schlüssel, um den Datenbankverschlüsselungsschlüssel für TDE zu verschlüsseln. Weitere Informationen zum Rotieren von Schlüsseln mittels PowerShell finden Sie unter Den Transparent Data Encryption (TDE)-Schutz mittels PowerShell rotieren.

Wichtig

Löschen Sie keine vorherigen Versionen des Schlüssels nach einem Rollover. Wenn Schlüssel rotiert werden, bleiben einige Daten weiterhin mit den vorherigen Schlüsseln verschlüsselt, wie ältere Datenbank-Backups, gesicherte Logdateien und Transaktionsprotokolle.

Sie müssen Anmeldeinformationen und eine Anmeldung sowie einen Datenbankverschlüsselungsschlüssel erstellen, der zum Verschlüsseln der Daten und Protokolle in der Datenbank dient. Die Verschlüsselung einer Datenbank erfordert die CONTROL-Berechtigung für die Datenbank. Die folgende Grafik zeigt die Hierarchie des Verschlüsselungsschlüssels, wenn Sie Azure Key Vault verwenden.

Diagramm, das die Hierarchie des Verschlüsselungsschlüssels bei Verwendung des Azure Key Vault zeigt.

  1. Erstellen von SQL Server-Anmeldeinformationen für die Datenbank-Engine für die Nutzung von TDE

    Die Datenbank-Engine verwendet die Microsoft Entra-Anwendungszugangsdaten, um während des Datenlades auf den Key Vault zuzugreifen. Um die von Ihnen erteilten Schlüsseltresor-Berechtigungen einzuschränken, erstellen Sie eine weitere Client-ID und ein Secret, wie in Schritt 1: Authentifizierungsmodell einrichten beschrieben, für die Datenbank-Engine.

    Ändern Sie das Transact-SQL-Skript unten in der folgenden Weise:

    • Bearbeiten Sie das IDENTITY -Argument (ContosoDevKeyVault), damit es auf Ihren Azure Key Vault verweist.

      • Wenn Sie eine globale Azure-Cloud verwenden, ersetzen Sie das IDENTITY-Argument durch den Namen Ihres Azure Key Vault aus Schritt 2: Erstellen eines Schlüsseltresors.
      • Wenn Sie eine private Azure-Cloud verwenden, zum Beispiel Azure Government, Azure, betrieben von 21Vianet, oder Azure Deutschland, ersetzen Sie das IDENTITY Argument durch die Vault-URI, die in "Create a key vault and key by using PowerShell" zurückgegeben wird. Schließen Sie https:// nicht in der Key Vault-URI ein.
    • Ersetzen Sie den ersten Teil des Arguments SECRET durch die Client-ID der Microsoft Entra-Anwendung aus Schritt 1: Einrichtung des Authentifizierungsmodells. In diesem Beispiel lautet die Client-IDEF5C8E094D2A4A769998D93440D8115D.

      Wichtig

      Bindestriche müssen aus der Client-IDentfernt werden.

    • Schließen Sie den zweiten Teil des Arguments SECRET mit dem Client Secret aus Schritt 1 ab. In diesem Beispiel ist das Client SecretReplaceWithAADClientSecret.

    • Die letzte Zeichenkette des Arguments SECRET ist eine lange Abfolge von Buchstaben und Zahlen ohne Bindestriche.

    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. Erstellen einer SQL Server-Anmeldung für die Datenbank-Engine für TDE

    Erstellen Sie eine SQL Server-Anmeldung und fügen Sie ihr die Anmeldeinformationen aus Schritt 1 hinzu. In diesem Transact-SQL-Beispiel wird der gleiche Schlüssel verwendet, der zuvor importiert wurde.

    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. Erstellen Sie den Datenbank-Verschlüsselungsschlüssel (DEK)

    Das DEK verschlüsselt Ihre Daten und Logdateien in der Datenbankinstanz und wird wiederum durch den asymmetrischen Schlüssel von Azure Key Vault verschlüsselt. Du kannst das DEK erstellen, indem du jeden Algorithmus oder jede Schlüssellänge verwendest, die SQL Server unterstützt.

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

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

    Überprüfen Sie mit Management Studio, ob TDE aktiviert ist, indem Sie sich mit Ihrer Datenbank über den Objekt-Explorer verbinden. Klicken Sie mit der rechten Maustaste auf Ihre Datenbank, zeigen Sie auf Aufgaben und wählen Sie dann Datenbankverschlüsselung verwalten.

    Screenshot: Objekt-Explorer mit ausgewählter Option „Aufgaben“ > „Datenbankverschlüsselung verwalten“.

    Prüfen Sie im Dialogfeld Datenbankverschlüsselung verwalten , nach, ob TDE aktiviert ist und welcher Schlüssel für die Verschlüsselung des DEKs verwendet wird.

    Screenshot: Dialogfeld „Datenbankverschlüsselung verwalten“ mit ausgewählter Option „Datenbankverschlüsselung aktivieren“ und einem gelben Banner mit der Aufschrift „Now TDE is turned on“ (TDE ist nun aktiviert)

    Alternativ können Sie das folgende Transact-SQL-Skript ausführen. Der Verschlüsselungsstatus 3 gibt eine verschlüsselte Datenbank an.

    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;  
    

    Hinweis

    Die tempdb -Datenbank wird automatisch verschlüsselt, wenn für eine beliebige Datenbank TDE aktiviert wird.

Verschlüsselung von Backups mit einem asymmetrischen Schlüssel aus dem Schlüsseltresor

Verschlüsselte Sicherungen werden ab SQL Server 2014 (12.x) unterstützt. Im folgenden Beispiel wird eine Sicherung erstellt und wiederhergestellt, die mit einem Verschlüsselungsschlüssel verschlüsselt wurde, der durch den asymmetrischen Schlüssel im Schlüsseltresor geschützt wird.

Die Datenbank-Engine verwendet die Microsoft Entra-Anwendungszugangsdaten, um während des Datenlades auf den Key Vault zuzugreifen. Um die von Ihnen erteilten Schlüsseltresor-Berechtigungen einzuschränken, erstellen Sie eine weitere Client-ID und ein Secret, wie in Schritt 1 beschrieben: Richten Sie das Authentifizierungsmodell für die Datenbank-Engine ein.

  1. Erstellen von SQL Server-Anmeldeinformationen für die Datenbank-Engine für die Sicherungsverschlüsselung

    Ändern Sie das Transact-SQL-Skript unten in der folgenden Weise:

    • Bearbeiten Sie das IDENTITY -Argument (ContosoDevKeyVault), damit es auf Ihren Azure Key Vault verweist.

    • Ersetzen Sie den ersten Teil des Arguments SECRET durch die Client-ID der Microsoft Entra-Anwendung aus Schritt 1: Einrichtung des Authentifizierungsmodells. In diesem Beispiel lautet die Client-IDEF5C8E094D2A4A769998D93440D8115D.

      Wichtig

      Bindestriche müssen aus der Client-IDentfernt werden.

    • Schließen Sie den zweiten Teil des Arguments SECRET mit dem Client Secret aus Schritt 1 ab. In diesem Beispiel ist das Client SecretReplace-With-AAD-Client-Secret. Die letzte Zeichenkette des Arguments SECRET ist eine lange Abfolge von Buchstaben und Zahlen ohne Bindestriche.

      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. Erstellen Sie einen SQL Server-Login für die Datenbank-Engine zur Backup-Verschlüsselung

    Erstellen Sie eine SQL Server-Anmeldung, die vom Datenbankmodul für Verschlüsselungssicherungen verwendet werden soll, und fügen Sie die Anmeldeinformationen aus Schritt 1 hinzu. In diesem Transact-SQL-Beispiel wird der gleiche Schlüssel verwendet, der zuvor importiert wurde.

    Wichtig

    Du kannst denselben asymmetrischen Schlüssel nicht für die Backup-Verschlüsselung verwenden, wenn du diesen Schlüssel bereits für TDE (das vorherige Beispiel) oder die Verschlüsselung auf Spaltenebene (im folgenden Beispiel) verwendet hast.

    Dieses Beispiel verwendet den CONTOSO_KEY_BACKUP asymmetrischen Schlüssel, der im Schlüsseltresor gespeichert ist und den Sie importieren oder früher für die master Datenbank anlegen können, wie in Schritt 2 beschrieben: Erstellen eines Schlüsseltresors.

    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. Sichern Sie die Datenbank

    Sichern Sie die Datenbank und spezifizieren Sie die Verschlüsselung mit dem asymmetrischen Schlüssel, der im Schlüsseltresor gespeichert ist.

    Im folgenden Beispiel ist zu beachten, dass, wenn die Datenbank bereits mit TDE verschlüsselt war und der asymmetrische Schlüssel CONTOSO_KEY_BACKUP sich vom TDE-asymmetrischen Schlüssel unterscheidet, das Backup sowohl durch den TDE-asymmetrischen Schlüssel als auch durch CONTOSO_KEY_BACKUP verschlüsselt wird. Die Zielinstanz SQL Server benötigt beide Schlüssel, um das Backup zu entschlüsseln.

    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. Datenbank wiederherstellen

    Um ein Datenbank-Backup wiederherzustellen, das mit TDE verschlüsselt ist, muss die Ziel-SQL Server-Instanz zunächst eine Kopie des asymmetrischen Schlüsseltresorschlüssels besitzen, der für die Verschlüsselung verwendet wird. Um dieses Exemplar bereitzustellen:

    • Wenn der ursprüngliche asymmetrische Schlüssel, der für TDE verwendet wurde, nicht mehr im Key Vault ist, stellen Sie die Sicherung des Key-Vault-Schlüssels wieder her oder importieren Sie den Schlüssel erneut aus einem lokalen HSM. Damit der Daumenabdruck des Schlüssels mit dem im Datenbank-Backup erfassten Abdruck übereinstimmt, muss der Schlüssel denselben Schlüsseltresor-Schlüsselnamen verwenden, den er ursprünglich hatte.

    • Wenden Sie die Schritte 1 und 2 auf der Zielinstanz SQL Server an.

    • Nachdem die Ziel-SQL Server-Instanz Zugriff auf die asymmetrischen Schlüssel zur Verschlüsselung des Backups hat, stellen Sie die Datenbank auf dem Server wieder her.

    Codebeispiel für die Wiederherstellung:

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

    Weitere Informationen zu Sicherungsoptionen finden Sie unter BACKUP (Transact-SQL).

Spaltenebenen-Verschlüsselung durch Verwendung eines asymmetrischen Schlüssels aus dem Schlüsseltresor

Das folgende Beispiel erstellt einen symmetrischen Schlüssel, der durch den asymmetrischen Schlüssel im Schlüsseltresor geschützt wird. Der symmetrische Schlüssel verschlüsselt dann die Daten in der Datenbank.

Wichtig

Du kannst denselben asymmetrischen Schlüssel nicht für die Spaltenverschlüsselung verwenden, wenn du diesen Schlüssel bereits für die Backup-Verschlüsselung verwendet hast.

Dieses Beispiel verwendet den CONTOSO_KEY_COLUMNS asymmetrischen Schlüssel, der im Schlüsseltresor gespeichert ist und den Sie importieren oder anlegen können, wie in Schritt 2 beschrieben: Erstellen eines Schlüsseltresors. Um diesen asymmetrischen Schlüssel in der ContosoDatabase Datenbank zu verwenden, führt man die CREATE ASYMMETRIC KEY Anweisung erneut aus, um der ContosoDatabase Datenbank eine Referenz auf den Schlüssel zu geben.

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;