적용 대상:SQL Server
Azure SQL Managed Instance
이 함수는 암호화된 데이터를 암호 해독합니다. 먼저 별도의 비대칭 키를 사용하여 대칭 키를 해독한 다음 첫 번째 단계에서 추출된 대칭 키를 사용하여 암호화된 데이터의 암호를 해독합니다.
구문
DECRYPTBYKEYAUTOASYMKEY ( akey_ID , akey_password
, { 'ciphertext' | @ciphertext }
[ , { add_authenticator | @add_authenticator }
[ , { authenticator | @authenticator } ] ] )
인수
akey_ID
대칭 키 암호화에 사용되는 비대칭 키의 ID입니다. akey_ID는 int 데이터 형식을 갖습니다.
akey_password
비대칭 키를 보호하는 암호입니다.
akey_password DMK(데이터베이스 마스터 키)가 비대칭 프라이빗 키를 보호하는 경우 값을 가질 NULL 수 있습니다.
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 데이터 형식을 갖습니다.
반환 형식
최대 크기가 8,000바이트인 varbinary입니다.
설명
DECRYPTBYKEYAUTOASYMKEY는 OPEN SYMMETRIC KEY와 DECRYPTBYKEY 모두의 기능을 결합합니다. 단일 작업에서 먼저 대칭 키를 해독한 다음, 해당 키를 사용하여 암호화된 텍스트를 해독합니다.
사용 권한
대칭 키에 대한 VIEW DEFINITION 권한 및 비대칭 키에 대한 CONTROL 권한이 필요합니다.
예제
이 예에서는 DECRYPTBYKEYAUTOASYMKEY가 암호 해독 코드를 단순화하는 방법을 보여줍니다. 이 코드는 DMK가 아직 없는 데이터베이스에서 AdventureWorks2025 실행되어야 합니다. 강력한 암호로 대체 <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