Erstellen identischer symmetrischer Schlüssel auf zwei Servern

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

In diesem Thema wird beschrieben, wie Sie mit Transact-SQL identische symmetrische Schlüssel auf zwei verschiedenen Servern in SQL Server erstellen. Zum Entschlüsseln von verschlüsseltem Text benötigen Sie den Schlüssel, der beim Verschlüsseln verwendet wurde. Wenn sowohl die Verschlüsselung als auch die Entschlüsselung in einer einzigen Datenbank erfolgen, wird der Schlüssel in der Datenbank gespeichert und ist je nach Berechtigungen sowohl für die Verschlüsselung als auch für die Entschlüsselung verfügbar. Wenn Verschlüsselung und Entschlüsselung jedoch in separaten Datenbanken oder auf separaten Servern stattfinden, kann der in einer Datenbank gespeicherte Schlüssel nicht für die zweite Datenbank verwendet werden.

Voraussetzungen

Einschränkungen

  • Beim Erstellen eines symmetrischen Schlüssels muss der symmetrische Schlüssel mithilfe mindestens eines der folgenden Elemente verschlüsselt werden: Zertifikat, Kennwort, symmetrischer Schlüssel, asymmetrischer Schlüssel oder PROVIDER. Der Schlüssel kann mehrere Verschlüsselungen jedes Typs aufweisen. Ein einzelner symmetrischer Schlüssel kann demnach mit mehreren Zertifikaten, Kennwörtern, symmetrischen Schlüsseln und asymmetrischen Schlüsseln gleichzeitig verschlüsselt sein.

  • Wenn ein symmetrischer Schlüssel mit einem Kennwort anstatt mit einem öffentlichen Schlüssel des Datenbank-Hauptschlüssels verschlüsselt ist, wird der TRIPLE_DES-Verschlüsselungsalgorithmus verwendet. Daher werden Schlüssel, die mit einem starken Verschlüsselungsalgorithmus wie z. B. AES erstellt werden, selbst mit einem schwächeren Algorithmus verschlüsselt.

Sicherheit

Berechtigungen

Erfordert die ALTER ANY SYMMETRIC KEY-Berechtigung in der Datenbank. Falls die AUTHORIZATION-Klausel angegeben ist, ist die IMPERSONATE-Berechtigung für den Datenbankbenutzer oder die ALTER-Berechtigung für die Anwendungsrolle erforderlich. Falls die Verschlüsselung mit einem Zertifikat oder asymmetrischen Schlüssel erfolgt, ist die VIEW DEFINITION-Berechtigung für das Zertifikat oder den asymmetrischen Schlüssel erforderlich. Nur Windows-Anmeldungen, SQL Server -Anmeldungen und Anwendungsrollen können symmetrische Schlüssel besitzen. Gruppen und Rollen können keine symmetrischen Schlüssel besitzen.

Verwenden von Transact-SQL

So erstellen Sie identische symmetrische Schlüssel auf zwei verschiedenen Servern

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Erstellen Sie einen Schlüssel, indem Sie die folgenden CREATE MASTER KEY-, CREATE CERTIFICATE- und CREATE SYMMETRIC KEY-Anweisungen ausführen.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My p@55w0Rd';  
    GO  
    CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection';  
    GO  
    CREATE SYMMETRIC KEY [key_DataShare] WITH  
        KEY_SOURCE = 'My key generation bits. This is a shared secret!',  
        ALGORITHM = AES_256,   
        IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret'  
        ENCRYPTION BY CERTIFICATE [cert_keyProtection];  
    GO  
    
  4. Stellen Sie eine Verbindung mit einer separaten Serverinstanz her, öffnen Sie ein anderes Abfragefenster, und führen Sie die oben erwähnten SQL-Anweisungen aus, um den gleichen Schlüssel auf dem zweiten Server zu erstellen.

  5. Testen Sie die Schlüssel, indem Sie zunächst die OPEN SYMMETRIC KEY-Anweisung und die SELECT-Anweisung unten auf dem ersten Server ausführen.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' )  
    GO  
    -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3  
    
  6. Fügen Sie auf dem zweiten Server das Ergebnis der vorherigen SELECT-Anweisung als Wert für @blob in den folgenden Code ein, und führen Sie den folgenden Code aus, um zu überprüfen, ob der verschlüsselte Text mit dem doppelten Schlüssel entschlüsselt werden kann.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    DECLARE @blob varbinary(8000);  
    SELECT CONVERT(varchar(8000), decryptbykey(@blob));  
    GO  
    
  7. Schließen Sie den symmetrischen Schlüssel auf beiden Servern.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

Änderungen der Verschlüsselung in SQL Server 2017 CU2

SQL Server 2016 verwendet den Hashalgorithmus SHA1 für die Verschlüsselung. Ab SQL Server 2017 wird stattdessen SHA2 verwendet. Das bedeutet, dass zusätzliche Schritte erforderlich sein können, damit Ihre SQL Server 2017-Installation Elemente entschlüsselt, die von SQL Server 2016 verschlüsselt wurden. Nachfolgend sind diese zusätzlichen Schritte aufgeführt:

  • Stellen Sie sicher, dass Ihre SQL Server 2017-Installation mindestens auf das kumulative Update 2 (CU2) aktualisiert ist.
  • Nach der Installation von CU2 aktivieren Sie das Ablaufverfolgungsflag 4631 in SQL Server 2017: DBCC TRACEON(4631, -1);
    • Das Ablaufverfolgungsflag 4631 ist neu in SQL Server 2017. Das Ablaufverfolgungsflag 4631 muss global auf ON gesetzt sein, bevor Sie den Hauptschlüssel, das Zertifikat oder den symmetrischen Schlüssel in SQL Server 2017 erstellen. Dadurch können diese erstellten Elemente mit SQL Server 2016 und früheren Versionen zusammenarbeiten. Dieses Ablaufverfolgungsflagge sollte nur vorübergehend aktiviert werden, um die erneute Verschlüsselung von Daten mit SHA2-abgeleiteten Schlüsseln durchführen zu können.

Weitere Informationen finden Sie unter:

Siehe auch