DECRYPTBYKEYAUTOCERT (Transact-SQL)
Расшифровка с помощью симметричного ключа, который автоматически расшифровывается с помощью сертификата.
Синтаксис
DecryptByKeyAutoCert ( cert_ID , cert_password
, { 'ciphertext' | @ciphertext }
[ , { add_authenticator | @add_authenticator }
[ , { authenticator | @authenticator } ] ] )
Аргумент
cert_ID
Идентификатор сертификата, используемого для защиты симметричного ключа. Аргумент cert_ID имеет тип int.cert_password
Пароль, защищающий закрытый ключ сертификата. Может быть равен значению NULL, если закрытый ключ защищен главным ключом базы данных. Аргумент cert_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 байт.
Замечания
Функция DecryptByKeyAutoCert объединяет функциональность OPEN SYMMETRIC KEY и DecryptByKey. В отдельной операции она расшифровывает симметричный ключ и использует его для расшифровки текста.
Разрешения
Необходимо разрешение VIEW DEFINITION на симметричный ключ и разрешение CONTROL на сертификат.
Примеры
В следующем примере показано, как с помощью функции DecryptByKeyAutoCert можно упростить код, отвечающий за расшифровку. Этот код должен работать на вновь установленной копии базы данных AdventureWorks.
--Create the keys and certificate.
USE AdventureWorks;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mzkvdlk979438teag$$ds987yghn)(*&4fdg^';
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'mzkvdlk979438teag$$ds987yghn)(*&4fdg^';
CREATE CERTIFICATE HumanResources037
WITH SUBJECT = 'Sammamish HR',
EXPIRY_DATE = '10/31/2009';
CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = DES
ENCRYPTION BY CERTIFICATE HumanResources037;
GO
----Add a column of encrypted data.
ALTER TABLE HumanResources.Employee
ADD EncryptedNationalIDNumber varbinary(128);
OPEN SYMMETRIC KEY SSN_Key_01
DECRYPTION BY CERTIFICATE HumanResources037 ;
UPDATE HumanResources.Employee
SET EncryptedNationalIDNumber
= EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);
GO
--
--Close the key used to encrypt the data.
CLOSE SYMMETRIC KEY SSN_Key_01;
--
--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_01
DECRYPTION BY CERTIFICATE HumanResources037;
SELECT NationalIDNumber, EncryptedNationalIDNumber
AS 'Encrypted ID Number',
CONVERT(nvarchar, DecryptByKey(EncryptedNationalIDNumber))
AS 'Decrypted ID Number'
FROM HumanResources.Employee;
CLOSE SYMMETRIC KEY SSN_Key_01;
--
--OPTION TWO, using DecryptByKeyAutoCert()
SELECT NationalIDNumber, EncryptedNationalIDNumber
AS 'Encrypted ID Number',
CONVERT(nvarchar, DecryptByKeyAutoCert ( cert_ID('HumanResources037') , NULL ,EncryptedNationalIDNumber))
AS 'Decrypted ID Number'
FROM HumanResources.Employee;