DECRYPTBYKEYAUTOASYMKEY (Transact-SQL)
Gilt für: SQL Server Azure SQL Managed Instance
Diese Funktion entschlüsselt verschlüsselte Daten. Hierzu entschlüsselt sie zunächst einen symmetrischen Schlüssel mit einem separaten asymmetrischen Schlüssel und entschlüsselt die verschlüsselten Daten anschließend mit dem Schlüssel, der im ersten Schritt extrahiert wurde.
Transact-SQL-Syntaxkonventionen
Syntax
DecryptByKeyAutoAsymKey ( akey_ID , akey_password
, { 'ciphertext' | @ciphertext }
[ , { add_authenticator | @add_authenticator }
[ , { authenticator | @authenticator } ] ] )
Argumente
akey_ID
Die ID des asymmetrischen Schlüssels, der für die Entschlüsselung des symmetrischen Schlüssels verwendet wird. akey_ID verfügt über einen int-Datentyp.
akey_password
Das Kennwort, mit dem der asymmetrische Schlüssel geschützt wird. akey_password kann den Wert NULL aufweisen, wenn der Datenbank-Hauptschlüssel den asymmetrischen privaten Schlüssel schützt. akey_password verfügt über einen nvarchar-Datentyp.
ciphertext entspricht den mit dem Schlüssel verschlüsselten Daten. ciphertext verfügt über einen varbinary-Datentyp.
@ciphertext
Eine Variable vom Typ varbinary, die Daten enthält, die mit dem symmetrischen Schlüssel verschlüsselt wurden.
add_authenticator
Gibt an, ob durch den ursprünglichen Verschlüsselungsprozess ein Authentifikator zusammen mit dem Klartext einbezogen und verschlüsselt wurde. Muss mit dem Wert übereinstimmen, der während der Datenverschlüsselung an ENCRYPTBYKEY (Transact-SQL) übergeben wurde. add_authenticator weist den Wert 1 auf, wenn im Verschlüsselungsprozess ein Authentifikator verwendet wurde. add_authenticator verfügt über einen int-Datentyp.
@add_authenticator
Eine Variable, die angibt, ob durch den ursprünglichen Verschlüsselungsprozess ein Authentifikator zusammen mit dem Klartext einbezogen, und verschlüsselt, wurde. Muss mit dem Wert übereinstimmen, der während der Datenverschlüsselung an ENCRYPTBYKEY (Transact-SQL) übergeben wurde. @add_authenticator weist den Datentyp int auf.
authenticator
Die Daten, die als Grundlage für die Generierung des Authentifikators verwendet werden. Diese müssen mit dem Wert übereinstimmen, der für ENCRYPTBYKEY (Transact-SQL) bereitgestellt wurde. authenticator verfügt über einen sysname-Datentyp.
@authenticator
Eine Variable, die Daten für die Generierung durch den Authentifikator enthält. Diese müssen mit dem Wert übereinstimmen, der für ENCRYPTBYKEY (Transact-SQL) bereitgestellt wurde. @authenticator weist den Datentyp sysname auf.
@add_authenticator
Eine Variable, die angibt, ob durch den ursprünglichen Verschlüsselungsprozess ein Authentifikator zusammen mit dem Klartext einbezogen, und verschlüsselt, wurde. Muss mit dem Wert übereinstimmen, der während der Datenverschlüsselung an ENCRYPTBYKEY (Transact-SQL) übergeben wurde. @add_authenticator weist den Datentyp int auf.
authenticator
Die Daten, die als Grundlage für die Generierung des Authentifikators verwendet werden. Diese müssen mit dem Wert übereinstimmen, der für ENCRYPTBYKEY (Transact-SQL) bereitgestellt wurde. authenticator verfügt über einen sysname-Datentyp.
@authenticator
Eine Variable, die Daten für die Generierung durch den Authentifikator enthält. Diese müssen mit dem Wert übereinstimmen, der für ENCRYPTBYKEY (Transact-SQL) bereitgestellt wurde. @authenticator weist den Datentyp sysname auf.
Rückgabetypen
varbinary mit einer maximalen Größe von 8.000 Byte.
Bemerkungen
DECRYPTBYKEYAUTOASYMKEY
kombiniert die Funktionen von OPEN SYMMETRIC KEY
und DECRYPTBYKEY
. In einem einzelnen Vorgang wird zunächst ein symmetrischer Schlüssel entschlüsselt, und mit diesem Schlüssel wird dann der verschlüsselte Chiffretext entschlüsselt.
Berechtigungen
Erfordert die VIEW DEFINITION
-Berechtigung für den symmetrischen Schlüssel und die CONTROL
-Berechtigung für den asymmetrischen Schlüssel.
Beispiele
In diesem Beispiel wird dargestellt, wie DECRYPTBYKEYAUTOASYMKEY
den Entschlüsselungscode vereinfachen kann. Dieser Code sollte für eine AdventureWorks2022
-Datenbank ausgeführt werden, die nicht bereits über einen Datenbank-Hauptschlüssel verfügt.
--Create the keys and certificate.
USE AdventureWorks2022;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mzkvdMlk979438teag$$ds987yghn)(*&4fdg^';
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'mzkvdMlk979438teag$$ds987yghn)(*&4fdg^';
CREATE ASYMMETRIC KEY SSN_AKey
WITH ALGORITHM = RSA_2048 ;
GO
CREATE SYMMETRIC KEY SSN_Key_02 WITH ALGORITHM = DES
ENCRYPTION BY ASYMMETRIC KEY SSN_AKey;
GO
--
--Add a column of encrypted data.
ALTER TABLE HumanResources.Employee
ADD EncryptedNationalIDNumber2 varbinary(128);
OPEN SYMMETRIC KEY SSN_Key_02
DECRYPTION BY ASYMMETRIC KEY SSN_AKey;
UPDATE HumanResources.Employee
SET EncryptedNationalIDNumber2
= EncryptByKey(Key_GUID('SSN_Key_02'), NationalIDNumber);
GO
--Close the key used to encrypt the data.
CLOSE SYMMETRIC KEY SSN_Key_02;
--
--There are two ways to decrypt the stored data.
--
--OPTION ONE, using DecryptByKey()
--1. Open the symmetric key.
--2. Decrypt the data.
--3. Close the symmetric key.
OPEN SYMMETRIC KEY SSN_Key_02
DECRYPTION BY ASYMMETRIC KEY SSN_AKey;
SELECT NationalIDNumber, EncryptedNationalIDNumber2
AS 'Encrypted ID Number',
CONVERT(nvarchar, DecryptByKey(EncryptedNationalIDNumber2))
AS 'Decrypted ID Number'
FROM HumanResources.Employee;
CLOSE SYMMETRIC KEY SSN_Key_02;
--
--OPTION TWO, using DecryptByKeyAutoAsymKey()
SELECT NationalIDNumber, EncryptedNationalIDNumber2
AS 'Encrypted ID Number',
CONVERT(nvarchar, DecryptByKeyAutoAsymKey ( AsymKey_ID('SSN_AKey') , NULL ,EncryptedNationalIDNumber2))
AS 'Decrypted ID Number'
FROM HumanResources.Employee;
GO
Weitere Informationen
OPEN SYMMETRIC KEY (Transact-SQL)
ENCRYPTBYKEY (Transact-SQL)
DECRYPTBYKEY (Transact-SQL)
Verschlüsselungshierarchie