DECRYPTBYKEYAUTOASYMKEY (Transact-SQL)
Проводит расшифровку с применением симметричного ключа, который автоматически расшифровывается с помощью асимметричного ключа.
Синтаксис
DecryptByKeyAutoAsymKey ( akey_ID , akey_password
, { 'ciphertext' | @ciphertext }
[ , { add_authenticator | @add_authenticator }
[ , { authenticator | @authenticator } ] ] )
Аргументы
akey_ID
Идентификатор асимметричного ключа, используемого для защиты симметричного ключа. Аргумент akey_ID имеет тип int.akey_password
Пароль, защищающий закрытый ключ асимметричного ключа. Может иметь значение NULL, если закрытый ключ защищен главным ключом базы данных. Аргумент akey_password имеет тип varchar.'ciphertext'
Данные, зашифрованные с помощью ключа. Аргумент ciphertext имеет тип varbinary.@ciphertext
Переменная типа varbinary. Содержит данные, которые были зашифрованы с помощью ключа.add_authenticator
Указывает, была ли структура проверки подлинности зашифровано вместе с неформатированным текстом. Значение этого аргумента должно быть равно значению, переданному функции EncryptByKey при шифровании данных. Имеет значение 1, если использовалась структура проверки подлинности. Аргумент add_authenticator имеет тип int.@add_authenticator
Указывает, была ли структура проверки подлинности зашифровано вместе с неформатированным текстом. Значение этого аргумента должно быть равно значению, переданному функции EncryptByKey при шифровании данных.authenticator
Данные, из которых создается структура проверки подлинности. Должны соответствовать значению, переданному функции EncryptByKey. Аргумент authenticator имеет тип sysname.@authenticator
Переменная, содержащая данные, на основе которых формируется средство проверки подлинности. Значение аргумента должно совпадать со значением, заданным функции EncryptByKey.
Типы возвращаемых данных
varbinary с максимальным размером 8 000 байт.
Замечания
DecryptByKeyAutoAsymKey сочетает функциональные возможности OPEN SYMMETRIC KEY и DecryptByKey. За одну операцию проводится расшифровка симметричного ключа и последующая расшифровка зашифрованного текста с его применением.
Разрешения
Необходимо разрешение VIEW DEFINITION на симметричный ключ и разрешение CONTROL на асимметричный ключ.
Примеры
В следующем примере показано, как с помощью функции DecryptByKeyAutoAsymKey можно упростить код, отвечающий за расшифровку. Этот код должен быть выполнен в базе данных База данных AdventureWorks2008R2, для которой еще не задан главный ключ базы данных.
--Create the keys and certificate.
USE AdventureWorks2008R2;
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