DECRYPTBYKEYAUTOCERT(Transact-SQL)

적용 대상:SQL ServerAzure SQL Managed Instance

이 함수는 대칭 키로 데이터의 암호를 해독합니다. 해당 대칭 키는 자동으로 인증서의 암호를 해독합니다.

Transact-SQL 구문 표기 규칙

Syntax

DecryptByKeyAutoCert ( cert_ID , cert_password   
    , { 'ciphertext' | @ciphertext }  
  [ , { add_authenticator | @add_authenticator }   
  [ , { authenticator | @authenticator } ] ] )  

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

cert_ID
대칭 키 암호화에 사용되는 인증서의 ID입니다. cert_IDint 데이터 형식을 갖습니다.

cert_password
인증서의 프라이빗 키를 암호화하는 데 사용되는 암호입니다. 데이터베이스 마스터 키가 비대칭 프라이빗 키를 보호하는 경우 NULL 값을 가질 수 있습니다. cert_passwordnvarchar 데이터 형식을 갖습니다.

'ciphertext'
키로 암호화된 데이터 문자열입니다. ciphertextvarbinary 데이터 형식을 갖습니다.

@ciphertext
키로 암호화된 데이터를 포함하는 varbinary 형식의 변수입니다.

add_authenticator
원래 암호화 프로세스가 포함되고 암호화된 인증자가 일반 텍스트를 사용하는지 여부를 나타냅니다. 데이터 암호화 프로세스 동안 ENCRYPTBYKEY(Transact-SQL)로 전달된 값과 일치해야 합니다. add_authenticator는 암호화 프로세스가 인증자를 사용한 경우 1의 값을 갖습니다. add_authenticatorint 데이터 형식을 갖습니다.

@add_authenticator
원래 암호화 프로세스가 포함되고 암호화된 인증자가 일반 텍스트를 사용하는지 여부를 나타내는 변수입니다. 데이터 암호화 프로세스 동안 ENCRYPTBYKEY(Transact-SQL)로 전달된 값과 일치해야 합니다. @add_authenticatorint 데이터 형식을 갖습니다.

authenticator
인증자의 생성에 대한 기준으로 사용되는 데이터입니다. ENCRYPTBYKEY(Transact-SQL)에 제공된 값과 일치해야 합니다. authenticatorsysname 데이터 형식을 갖습니다.

@authenticator
인증자가 생성하는 데이터를 포함하는 변수입니다. ENCRYPTBYKEY(Transact-SQL)에 제공된 값과 일치해야 합니다. @authenticatorsysname 데이터 형식을 갖습니다.

반환 형식

최대 크기가 8,000바이트인 varbinary입니다.

설명

DECRYPTBYKEYAUTOCERTOPEN SYMMETRIC KEYDECRYPTBYKEY의 기능을 결합합니다. 단일 작업에서 먼저 대칭 키를 해독한 다음, 해당 키를 사용하여 암호화된 텍스트를 해독합니다.

사용 권한

대칭 키에 대한 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)
암호화 계층