Verwenden von SQL Server-Connector mit SQL-Verschlüsselungsfunktionen

Anwendungsbereich: JaSQL Server (alle unterstützten Versionen)

Gebräuchliche SQL Server -Verschlüsselungsaktivitäten unter Verwendung eines asymmetrischen Schlüssels, der von Azure Key Vault geschützt wird, finden sich in den folgenden drei Bereichen.

  • Transparente Datenverschlüsselung mithilfe eines asymmetrischen Schlüssels aus Azure Key Vault

  • Verschlüsseln von Sicherungen mit einem asymmetrischen Schlüssel aus dem Schlüsseltresor

  • Verschlüsselung auf Spaltenebene mit einem asymmetrischen Schlüssel aus dem Schlüsseltresor

Schließen Sie die Teile I bis IV des Themas Installationsschritte für die Erweiterbare Schlüsselverwaltung mit Azure Key Vaultab, bevor Sie die Schritte in diesem Thema ausführen.

Hinweis

Die Versionen 1.0.0.440 und älter wurden ersetzt und werden nicht länger in Produktionsumgebungen unterstützt. Führen Sie ein Upgrade auf Version 1.0.1.0 oder höher durch, indem Sie das Microsoft Download Center besuchen und die Anweisungen auf der Seite SQL Server-Connector Wartung & Problembehandlung unter „Upgrade des SQL Server-Connectors“ ausführen.

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

Verwenden Sie nach dem Abschluss der Teile I bis IV des Themas „Installationsschritte für die Erweiterbare Schlüsselverwaltung mit Azure Key Vault“ den Azure Key Vault-Schlüssel, um den Datenbankverschlüsselungsschlüssel mithilfe von TDE zu verschlüsseln. Weitere Informationen zum Rotieren von Schlüsseln mithilfe von PowerShell finden Sie unter Rotieren einer Transparent Data Encryption-Schutzvorrichtung (TDE) mithilfe von PowerShell.

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. Zum Verschlüsseln einer Datenbank ist die CONTROL -Berechtigung für die Datenbank erforderlich. Die folgende Grafik zeigt die Hierarchie des Verschlüsselungsschlüssels bei Verwendung von Azure Key Vault.

Diagramm: Hierarchie des Verschlüsselungsschlüssels bei Verwendung von Azure Key Vault

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

    Die Datenbank-Engine verwendet die Anmeldeinformationen für den Zugriff auf den Schlüsseltresor während des Ladens der Datenbank. Es wird empfohlen, in Teil I eine weitere Azure Active Directory- Client-ID und einen weiteren geheimen Schlüssel für das Datenbank-Enginezu erstellen, um die erteilten Schlüsseltresorberechtigungen einzuschränken.

    Ä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-Schlüsseltresors aus Teil II.
      • Wenn Sie eine private Azure-Cloud verwenden (z. B. Azure Government, Azure China 21ViaNet oder Azure Deutschland. Ersetzen Sie das IDENTITY-Argument durch den Key Vault-URI, der in Teil II, Schritt 3 zurückgegeben wird. Schließen Sie „https://“ nicht in den Tresor-URI ein.
    • Ersetzen Sie den ersten Teil des SECRET -Arguments durch die Azure Active Directory- Client-ID aus Teil I. In diesem Beispiel ist die Client-IDEF5C8E094D2A4A769998D93440D8115D.

      Wichtig

      Bindestriche müssen aus der Client-ID entfernt werden.

    • Vervollständigen Sie den zweiten Teil des SECRET-Arguments mit dem geheimen Clientschlüssel aus Teil 1. In diesem Beispiel ist der geheime Clientschlüssel aus Teil 1 ReplaceWithAADClientSecret.

    • Die endgültige Zeichenfolge für das SECRET-Argument ist eine lange Abfolge von Buchstaben und Ziffern 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 Azure China 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 das 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 des Datenbank-Verschlüsselungsschlüssels (DEK)

    Der DEK verschlüsselt Ihre Daten und Protokolldateien in der Datenbankinstanz und wird seinerseits mithilfe des asymmetrischen Schlüssels aus Azure Key Vault verschlüsselt. Der DEK kann mithilfe eines beliebigen von SQL Server unterstützten Algorithmus mit beliebiger Schlüssellänge erstellt werden.

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

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

    Überprüfen Sie mithilfe von Management Studio, dass TDE aktiviert wurde, indem Sie eine Verbindung mit Ihrer Datenbank mithilfe des Objekt-Explorers herstellen. Klicken Sie mit der rechten Maustaste auf Ihre Datenbank, zeigen Sie auf Aufgaben , und klicken Sie anschließend auf 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üsseln von Sicherungen 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.
Das Datenbank-Engine benötigt die Anmeldeinformationen zum Zugriff auf den Schlüsseltresor während des Ladens der Datenbank. Es wird empfohlen, in Teil I eine weitere Azure Active Directory-Client-ID und einen weiteren geheimen Schlüssel für die Datenbank-Engine zu erstellen, um die erteilten Schlüsseltresorberechtigungen einzuschränken.

  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.

      • Wenn Sie eine globale Azure-Cloud verwenden, ersetzen Sie das IDENTITY-Argument durch den Namen Ihres Azure-Schlüsseltresors aus Teil II.
      • Wenn Sie eine private Azure-Cloud verwenden (z. B. Azure Government, Azure China 21ViaNet oder Azure Deutschland. Ersetzen Sie das IDENTITY-Argument durch den Key Vault-URI, der in Teil II, Schritt 3 zurückgegeben wird. Schließen Sie „https://“ nicht in den Tresor-URI ein.
    • Ersetzen Sie den ersten Teil des SECRET -Arguments durch die Azure Active Directory- Client-ID aus Teil I. In diesem Beispiel ist die Client-IDEF5C8E094D2A4A769998D93440D8115D.

      Wichtig

      Bindestriche müssen aus der Client-ID entfernt werden.

    • Setzen Sie in den zweiten Teil des SECRET -Arguments den geheimen Clientschlüssel aus Teil I ein. In diesem Beispiel ist der geheime Clientschlüssel aus Teil I Replace-With-AAD-Client-Secret. Die endgültige Zeichenfolge für das SECRET -Argument ist eine lange Abfolge von Buchstaben und Ziffern 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 Azure China 21Vianet
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
          SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret'   
      FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;    
      
  2. Erstellen einer SQL Server -Anmeldung für das Datenbank-Engine für die Sicherungsverschlüsselung

    Erstellen Sie eine SQL Server --Anmeldung, die vom Datenbank-Enginefür verschlüsselte Sicherungen verwendet wird, 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.

    Wichtig

    Sie können zum Verschlüsseln von Sicherungen keinen asymmetrischen Schlüssel verwenden, den Sie bereits für TDE (im Beispiel oben) oder die Verschlüsselung auf Spaltenebene (im Beispiel unten) verwendet haben.

    In diesem Beispiel wird der asymmetrische Schlüssel CONTOSO_KEY_BACKUP aus dem Schlüsseltresor verwendet, der zuvor für die Masterdatenbank importiert oder erstellt werden kann, wie weiter oben in Teil IV, Schritt 5 beschrieben.

    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 der Datenbank

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

    Im folgenden Beispiel sollten Sie beachten, dass wenn die Datenbank bereits mit TDE verschlüsselt wurde und sich der asymmetrische Schlüssel CONTOSO_KEY_BACKUP vom asymmetrischen Schlüssel von TDE unterscheidet, die Sicherung mit dem asymmetrischen Schlüssel von TDE und CONTOSO_KEY_BACKUP verschlüsselt wird. Die SQL Server-Zielinstanz benötigt beide Schlüssel, um die Sicherung 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. Wiederherstellen der Datenbank

    Um eine Sicherung, die mithilfe von TDE verschlüsselt wurde, wiederherzustellen, muss die SQL Server-Zielinstanz zunächst über eine Kopie des asymmetrischen Key Vault-Schlüssels für die Verschlüsselung verfügen. Dies würde folgendermaßen erreicht werden:

    • Ist der ursprüngliche asymmetrische Schlüssel, der für TDE verwendet wird, nicht mehr im Key Vault vorhanden, dann stellen Sie die wichtigste Schlüsselsicherung im Key Vault wieder her oder importieren Sie den Schlüssel aus einem lokalen HSM. Wichtig: Damit der Fingerabdruck des Schlüssels dem in der Datenbanksicherung gespeicherten Fingerabdruck entspricht, erhält der Schlüssel denselben Key Vault-Schlüsselnamen , den er ursprünglich erhalten hatte.

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

    • Sobald die SQL Server-Zielinstanz Zugriff auf den asymmetrischen Schlüssel zum Verschlüsseln der Sicherung 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).

Verschlüsselung auf Spaltenebene mit einem asymmetrischen Schlüssel aus dem Schlüsseltresor

Das folgende Beispiel erstellt einen symmetrischen Schlüssel, der durch den asymmetrischen Schlüssel im Schlüsseltresor geschützt wird. Anschließend wird der symmetrische Schlüssel zum Verschlüsseln von Daten in der Datenbank verwendet.

Wichtig

Sie können für die Sicherungsverschlüsselung nicht den gleichen asymmetrischen Schlüssel verwenden, den Sie bereits für TDE oder die Sicherungsverschlüsslung (siehe vorstehende Beispiele) verwendet haben.

In diesem Beispiel wird der asymmetrische Schlüssel CONTOSO_KEY_COLUMNS aus dem Schlüsseltresor verwendet, der zuvor importiert oder erstellt wurde, wie oben in Schritt 3, Abschnitt 3 von Installationsschritte für die Erweiterbare Schlüsselverwaltung mit Azure Key Vaultbeschrieben. Um diesen asymmetrischen Schlüssel in der ContosoDatabase -Datenbank zu verwenden, müssen Sie die CREATE ASYMMETRIC KEY -Anweisung erneut ausführen, um der ContosoDatabase -Datenbank einen Verweis auf den Schlüssel zur Verfügung zu stellen.

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;  

Weitere Informationen

Installationsschritte für die Erweiterbare Schlüsselverwaltung mit Azure Key Vault
Erweiterbare Schlüsselverwaltung mit Azure Key Vault
EKM provider enabled (Serverkonfigurationsoption)
SQL Server-Connector – Verwaltung und Problembehandlung