Vorgehensweise: Erstellen identischer symmetrischer Schlüssel auf zwei Servern
Zum Entschlüsseln von verschlüsseltem Text benötigen Sie den Schlüssel, der beim Verschlüsseln verwendet wurde. Wenn eine Datenbank sowohl Verschlüsselungen als auch Entschlüsselungen enthält, ist der Schlüssel in der Datenbank gespeichert, und er ist entsprechend den Berechtigungen sowohl für die Verschlüsselung als auch für die Entschlüsselung verfügbar. Wenn sich Verschlüsselung und Entschlüsselung jedoch in separaten Datenbanken oder auf separaten Servern befinden, kann der in einer Datenbank gespeicherte Schlüssel nicht für die zweite Datenbank verwendet werden. In diesem Thema wird die Bereitstellung eines freigegebenen symmetrischen Schlüssels für Datenbanken auf zwei separaten Servern erläutert.
Übersicht
Das Erstellen identischer symmetrischer Schlüssel ist recht einfach. Symmetrische Schlüssel, die mit denselben Schlüsseloptionen KEY_SOURCE, ALGORITHM und IDENTITY_VALUE erstellt wurden, sind identisch. Vor dem Erstellen eines symmetrischen Schlüssels sollten Sie sicherstellen, dass die Schlüsselverwaltungsmechanismen von SQL Server initialisiert wurden. Falls noch nicht vorhanden, sollten Sie einen Datenbank-Hauptschlüssel zum Aktivieren der automatischen Schlüsselverwaltung und ein Zertifikat erstellen, um den symmetrischen Schlüssel zu verschlüsseln. Optional können Sie den symmetrischen Schlüssel mit einem Kennwort schützen. Weitere Informationen finden Sie unter CREATE SYMMETRIC KEY (Transact-SQL).
Beispiel
In diesem Beispiel werden identische symmetrische Schlüssel auf zwei Servern erstellt. Im Beispiel wird der Verschlüsselungsalgorithmus AES_256 verwendet. Die AES-Verschlüsselungsalgorithmen werden unter Windows XP oder Windows Server 2000 nicht unterstützt. Sie müssen möglicherweise einen anderen Algorithmus (z. B. TRIPLE_DES) angeben.
Erstellen Sie die Schlüssel, indem Sie die folgenden CREATE MASTER KEY-, CREATE CERTIFICATE- und CREATE SYMMETRIC KEY-Anweisungen auf beiden Servern 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
Testen Sie die Schlüssel, indem Sie zunächst die OPEN SYMMETRIC KEY-Anweisung und die SELECT-Anweisung auf einem 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
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); SET @blob = SELECT CONVERT(varchar(8000), decryptbykey(@blob)); GO
Schließen Sie den symmetrischen Schlüssel auf beiden Servern.
CLOSE SYMMETRIC KEY [key_DataShare]; GO