EncryptByKey (Transact-SQL)

Verschlüsselt Daten mithilfe eines symmetrischen Schlüssels.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen


EncryptByKey ( 
                                key_GUID , { 'cleartext' | @cleartext }
                [ 
                                        , { add_authenticator | @add_authenticator }
                                        , { authenticator | @authenticator } 
                ]
                          )

key_GUID

Bezeichnet den GUID des zum Verschlüsseln von cleartext verwendeten Schlüssels. uniqueidentifier.

' cleartext '

Bezeichnet die mithilfe des Schlüssels zu verschlüsselnden Daten.

@cleartext

Eine Variable vom Typ nvarchar, char, varchar, binary, varbinary oder nchar, die Daten enthält, die mit dem Schlüssel verschlüsselt werden sollen.

add_authenticator

Gibt an, ob ein Authentifikator mit cleartext verschlüsselt werden soll. Muss beim Verwenden eines Authentifikators 1 sein. int.

@add_authenticator

Gibt an, ob ein Authentifikator mit cleartext verschlüsselt werden soll. Muss beim Verwenden eines Authentifikators 1 sein. int.

authenticator

Die Daten, von denen ein Authentifikator abgeleitet wird. sysname.

@authenticator

Eine Variable, die Daten enthält, von denen ein Authentifikator abgeleitet werden soll.

varbinary mit einer maximalen Größe von 8.000 Bytes.

EncryptByKey verwendet einen symmetrischen Schlüssel. Dieser Schlüssel muss geöffnet sein. Wenn der symmetrische Schlüssel in der aktuellen Sitzung bereits geöffnet ist, ist es nicht notwendig, ihn im Kontext der Abfrage erneut zu öffnen.

Mit dem Authentifikator kann verhindert werden, dass ganze Werte in verschlüsselten Feldern ersetzt werden. Betrachten Sie dazu beispielsweise die folgende Tabelle mit Daten zu Gehältern.

Employee_ID Standard_Title Base_Pay

345

Kopierraumhilfe

Fskj%7^edhn00

697

Leiter der Finanzabteilung

M0x8900f56543

694

EDV-Leiter

Cvc97824%^34f

Ohne die Verschlüsselung aufzubrechen, kann ein Hacker wichtige Informationen aus dem Kontext folgern, in dem der verschlüsselte Text gespeichert wird. Da ein Leiter der Finanzabteilung besser als eine Kopierraumhilfe verdient, folgt daraus, dass der als M0x8900f56543 verschlüsselte Wert größer als der als Fskj%7^edhn00 verschlüsselte Wert sein muss. Wenn dies der Fall ist, kann jeder beliebige Benutzer mit der ALTER-Berechtigung für die Tabelle der Kopierraumhilfe eine Gehaltserhöhung verschaffen, indem die Daten in seinem Base_Pay-Feld durch eine Kopie der im Base_Pay-Feld gespeicherten Daten des Leiters der Finanzabteilung ersetzt werden. Dieser ganzwertige Ersetzungsangriff umgeht die Verschlüsselung insgesamt.

Ganzwertige Ersetzungsangriffe können durch Hinzufügen von Kontextinformationen zum Klartext vereitelt werden, bevor dieser verschlüsselt wird. Diese Kontextinformationen werden zum Überprüfen verwendet, ob die Klartextdaten verschoben wurden.

Wenn ein authenticator-Parameter beim Verschlüsseln der Daten angegeben wird, wird der gleiche Authentifikator zum Entschlüsseln der Daten mithilfe von DecrpytByKey benötigt. Zur Verschlüsselungszeit wird ein Hash des Authentifikators zusammen mit dem Klartext verschlüsselt. Zur Entschlüsselungszeit muss der gleiche Authentifikator an DecryptByKey übergeben werden. Stimmen beide nicht überein, schlägt die Entschlüsselung fehl. Dies zeigt an, dass der Wert seit seiner Verschlüsselung verschoben wurde. Es wird empfohlen, den Primärschlüssel der Tabelle zu verwenden, in der das Ergebnis als Wert dieses Parameters gespeichert wird.

Die symmetrische Ver- und Entschlüsselung nimmt recht wenig Zeit in Anspruch und ist für die Bearbeitung umfangreicher Datenmengen geeignet.

ms174361.note(de-de,SQL.90).gifWichtig:
Bei Verwendung der SQL Server-Verschlüsselungsfunktionen, die die Einstellung ANSI_PADDING OFF verwenden, könnte aufgrund von impliziten Konvertierungen ein Datenverlust entstehen. Weitere Informationen zu ANSI_PADDING finden Sie unter SET ANSI_PADDING (Transact-SQL).

Die in den folgenden Beispielen veranschaulichte Funktionalität beruht auf Schlüsseln und Zertifikaten, die unter Vorgehensweise: Verschlüsseln einer Spalte mit Daten erstellt werden.

A. Verschlüsseln einer Zeichenfolge mithilfe eines symmetrischen Schlüssels

Im folgenden Beispiel wird der Employee-Tabelle eine Spalte hinzugefügt und dann der Wert der Sozialversicherungsnummer in der NationalIDNumber-Spalte verschlüsselt.

USE AdventureWorks;
GO

-- Create a column in which to store the encrypted data.
ALTER TABLE HumanResources.Employee
    ADD EncryptedNationalIDNumber varbinary(128); 
GO

-- Open the symmetric key with which to encrypt the data.
OPEN SYMMETRIC KEY SSN_Key_01
   DECRYPTION BY CERTIFICATE HumanResources037;

-- Encrypt the value in column NationalIDNumber with symmetric key
-- SSN_Key_01. Save the result in column EncryptedNationalIDNumber.
UPDATE HumanResources.Employee
SET EncryptedNationalIDNumber
    = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);
GO

B. Verschlüsseln eines Datensatzes zusammen mit einem Authentifizierungswert

USE AdventureWorks;

-- Create a column in which to store the encrypted data.
ALTER TABLE Sales.CreditCard. 
    ADD CardNumber_Encrypted varbinary(128); 
GO

-- Open the symmetric key with which to encrypt the data.
OPEN SYMMETRIC KEY CreditCards_Key11
    DECRYPTION BY CERTIFICATE Sales09;

-- Encrypt the value in column CardNumber with symmetric 
-- key CreditCards_Key11.
-- Save the result in column CardNumber_Encrypted.  
UPDATE Sales.CreditCard
SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11'), 
    CardNumber, 1, CONVERT( varbinary, CreditCardID) );
GO

Community-Beiträge

HINZUFÜGEN
Anzeigen: