다음을 통해 공유


DECRYPTBYKEYAUTOCERT(Transact-SQL)

적용 대상:SQL ServerAzure SQL Managed Instance

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

Transact-SQL 구문 표기 규칙

구문

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

인수

cert_ID

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

cert_password

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

'ciphertext'

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

@ciphertext

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

add_authenticator

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

@add_authenticator

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

authenticator

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

@authenticator

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

반환 형식

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

설명

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

사용 권한

대칭 키에 대한 VIEW DEFINITION 권한 및 인증서에 대한 CONTROL 권한이 필요합니다.

예제

이 예에서는 DECRYPTBYKEYAUTOCERT가 암호 해독 코드를 단순화하는 방법을 보여줍니다. 이 코드는 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 CERTIFICATE HumanResources037
    WITH SUBJECT = 'Sammamish HR', EXPIRY_DATE = '10/31/2035';

CREATE SYMMETRIC KEY SSN_Key_01
    WITH ALGORITHM = AES_256
    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;