Erstellen identischer symmetrischer Schlüssel auf zwei Servern

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

In diesem Thema wird beschrieben, wie identische symmetrische Schlüssel in SQL Server mit Transact-SQL auf zwei verschiedenen Servern erstellt werden. 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.

Bevor Sie beginnen

Einschränkungen und Beschrä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 ALTER ANY-Berechtigung SYMMETRIC KEY für die Datenbank. Wenn AUTHORIZATION angegeben ist, ist die IMPERSONATE-Berechtigung für den Datenbankbenutzer oder die ALTER-Berechtigung für die Anwendungsrolle erforderlich. Wenn die Verschlüsselung mittels eines Zertifikats oder eines asymmetrischen Schlüssels erfolgt, ist die Berechtigung VIEW DEFINITION 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 CERTIFICATEund CREATE SYMMETRIC KEY Anweisungen ausführen. Ersetzen Sie <password> durch ein gültiges Kennwort.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';  
    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 zuerst 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.
  • Nachdem Sie CU2 installiert haben, aktivieren Sie das Traceflag 4631 in SQL Server 2017: DBCC TRACEON(4631, -1);
    • Das Traceflag 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 Traceflag sollte nur vorübergehend aktiviert werden, um die Neuverschlüsselung von Daten mit von SHA2 abgeleiteten Schlüsseln durchzuführen.

Weitere Informationen finden Sie unter:

Siehe auch