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