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 для упрощения кода, выполняющего расшифровку. Этот код должен работать на вновь установленной копии базы данных AdventureWorks.
--Create the keys and certificate.
USE AdventureWorks;
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
.gif)