DECRYPTBYKEYAUTOCERT (Transact-SQL)
Область применения: SQL Server Управляемый экземпляр SQL Azure
Эта функция расшифровывает данные с помощью симметричного ключа. Симметричный ключ автоматически расшифровывается с помощью сертификата.
Соглашения о синтаксисе 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 имеет тип данных nvarchar.
'ciphertext'
Строка данных, зашифрованная с помощью ключа. ciphertext имеет тип данных varbinary.
@ciphertext
Переменная типа varbinary, содержащая данные, зашифрованные с помощью ключа.
add_authenticator
Указывает, включен ли исходный процесс шифрования и зашифрована ли структура проверки подлинности вместе с данными в виде открытого текста. Значение должно соответствовать значению, переданному функции ENCRYPTBYKEY (Transact-SQL) во время шифрования данных. add_authenticator имеет значение 1, если в процессе шифрования использовалась структура проверки подлинности. add_authenticator имеет тип данных int.
@add_authenticator
Переменная, указывающая, включен ли исходный процесс шифрования и зашифрована ли структура проверки подлинности вместе с данными в виде открытого текста. Значение должно соответствовать значению, переданному функции ENCRYPTBYKEY (Transact-SQL) во время шифрования данных. @add_authenticator имеет тип данных int.
authenticator
Данные, используемые в качестве основы для создания структуры проверки подлинности. Значение должно соответствовать значению, заданному функции ENCRYPTBYKEY (Transact-SQL). authenticator имеет тип данных sysname.
@authenticator
Переменная, содержащая данные, из которых формируется структура проверки подлинности. Значение должно соответствовать значению, заданному функции ENCRYPTBYKEY (Transact-SQL). authenticator имеет тип данных sysname.
Типы возвращаемых данных
Переменная типа varbinary с максимальным размером 8000 байт.
Замечания
Функция DECRYPTBYKEYAUTOCERT
объединяет функциональность OPEN SYMMETRIC KEY
и DECRYPTBYKEY
. За одну операцию она сначала расшифровывает симметричный ключ, а затем с его помощью расшифровывает зашифрованный текст.
Разрешения
Необходимо разрешение VIEW DEFINITION
для симметричного ключа и разрешение CONTROL
для сертификата.
Примеры
В этом примере показано, как DECRYPTBYKEYAUTOCERT
может упростить код расшифровки. Этот код должен быть выполнен в базе данных AdventureWorks2022
, для которой еще не задан главный ключ базы данных.
--Create the keys and certificate.
USE AdventureWorks2022;
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;
См. также
OPEN SYMMETRIC KEY (Transact-SQL)
ENCRYPTBYKEY (Transact-SQL)
DECRYPTBYKEY (Transact-SQL)
Иерархия средств шифрования