Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: 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