DECRYPTBYKEYAUTOCERT(Transact-SQL)
적용 대상: SQL Server Azure SQL Managed Instance
이 함수는 대칭 키로 데이터의 암호를 해독합니다. 해당 대칭 키는 자동으로 인증서의 암호를 해독합니다.
구문
DecryptByKeyAutoCert ( cert_ID , cert_password
, { 'ciphertext' | @ciphertext }
[ , { add_authenticator | @add_authenticator }
[ , { authenticator | @authenticator } ] ] )
인수
cert_ID
대칭 키 암호화에 사용되는 인증서의 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 데이터 형식을 갖습니다.
반환 형식
최대 크기가 8,000바이트인 varbinary입니다.
설명
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)
암호화 계층