CERTENCODED(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
이 함수는 인증서의 공용 부분을 이진 형식으로 반환합니다. 이 함수는 인증서 ID를 인수로 사용하고 인코딩된 인증서를 반환합니다. 새 인증서를 만들려면 CREATE CERTIFICATE에 이진 결과를 전달합니다. 이진 파일과 함께.
구문
CERTENCODED ( cert_id )
인수
cert_id
인증서의 certificate_id입니다. sys.certificates에서 이 값을 찾습니다. CERT_ID(Transact-SQL) 함수도 이를 반환합니다. cert_id는 int 데이터 형식을 갖습니다.
반환 형식
varbinary
설명
CERTENCODED와 CERTPRIVATEKEY를 함께 사용하여 인증서의 여러 부분을 이진 형식으로 반환합니다.
사용 권한
CERTENCODED 는 공개적으로 사용할 수 있습니다.
예제
간단한 예
이 예에서는 이름이 Shipping04
인 인증서를 만든 다음, CERTENCODED 함수를 사용하여 인증서의 이진 인코딩을 반환합니다. 이 예에서는 2040년 10월 31일을 인증서 만료 날짜로 설정합니다.
CREATE DATABASE TEST1;
GO
USE TEST1
CREATE CERTIFICATE Shipping04
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records',
EXPIRY_DATE = '20401031';
GO
SELECT CERTENCODED(CERT_ID('Shipping04'));
B. 다른 데이터베이스에 인증서 복사
더 복잡한 예제에서는 두 개의 데이터베이스를 만들고 . SOURCE_DB
TARGET_DB
그런 다음, 인증서 SOURCE_DB
를 만들고 인증서를 복사합니다 TARGET_DB
. 마지막으로, SOURCE_DB
에서 암호화된 데이터가 인증서 사본을 사용하여 TARGET_DB
에서 해독될 수 있음을 보여 줍니다.
예제 환경을 만들려면 각 데이터베이스에서 SOURCE_DB
TARGET_DB
및 데이터베이스 및 마스터 키를 만듭니다. 그런 다음 , 에서 인증서를 만듭니다 SOURCE_DB
.
USE master;
GO
CREATE DATABASE SOURCE_DB;
GO
USE SOURCE_DB;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0URCE_DB KEY Pa$$W0rd';
GO
CREATE DATABASE TARGET_DB;
GO
USE TARGET_DB
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$W0rd in TARGET_DB';
GO
-- Create a certificate in SOURCE_DB
USE SOURCE_DB;
GO
CREATE CERTIFICATE SOURCE_CERT WITH SUBJECT = 'SOURCE_CERTIFICATE';
GO
다음으로 인증서의 이진 설명을 추출합니다.
DECLARE @CERTENC VARBINARY(MAX);
DECLARE @CERTPVK VARBINARY(MAX);
SELECT @CERTENC = CERTENCODED(CERT_ID('SOURCE_CERT'));
SELECT @CERTPVK = CERTPRIVATEKEY(CERT_ID('SOURCE_CERT'),
'CertEncryptionPa$$word');
SELECT @CERTENC AS BinaryCertificate;
SELECT @CERTPVK AS EncryptedBinaryCertificate;
GO
그런 다음 데이터베이스에 중복 인증서를 TARGET_DB
만듭니다. 이 작업을 위해 다음 코드를 수정하여 이전 단계에서 반환된 두 이진 값 @CERTENC 및 @CERTPVK를 삽입합니다. 이러한 값을 따옴표로 묶지 마세요.
-- Create the duplicate certificate in the TARGET_DB database
USE TARGET_DB
GO
CREATE CERTIFICATE TARGET_CERT
FROM BINARY = <insert the binary value of the @CERTENC variable>
WITH PRIVATE KEY (
BINARY = <insert the binary value of the @CERTPVK variable>
, DECRYPTION BY PASSWORD = 'CertEncryptionPa$$word');
-- Compare the certificates in the two databases
-- The two certificates should be the same
-- except for name and (possibly) the certificate_id
SELECT * FROM SOURCE_DB.sys.certificates
UNION
SELECT * FROM TARGET_DB.sys.certificates;
단일 일괄 처리로 실행되는 다음 코드는 SOURCE_DB
에서 암호화된 데이터를 TARGET_DB
에서 해독할 수 있음을 보여 줍니다.
USE SOURCE_DB;
DECLARE @CLEARTEXT nvarchar(100);
DECLARE @CIPHERTEXT varbinary(8000);
DECLARE @UNCIPHEREDTEXT_Source nvarchar(100);
SET @CLEARTEXT = N'Hello World';
SET @CIPHERTEXT = ENCRYPTBYCERT(CERT_ID('SOURCE_CERT'), @CLEARTEXT);
SET @UNCIPHEREDTEXT_Source =
DECRYPTBYCERT(CERT_ID('SOURCE_CERT'), @CIPHERTEXT)
-- Encryption and decryption result in SOURCE_DB
SELECT @CLEARTEXT AS SourceClearText, @CIPHERTEXT AS SourceCipherText,
@UNCIPHEREDTEXT_Source AS SourceDecryptedText;
-- SWITCH DATABASE
USE TARGET_DB;
DECLARE @UNCIPHEREDTEXT_Target nvarchar(100);
SET @UNCIPHEREDTEXT_Target = DECRYPTBYCERT(CERT_ID('TARGET_CERT'), @CIPHERTEXT);
-- Encryption and decryption result in TARGET_DB
SELECT @CLEARTEXT AS ClearTextInTarget, @CIPHERTEXT AS CipherTextInTarget, @UNCIPHEREDTEXT_Target AS DecriptedTextInTarget;
GO
참고 항목
보안 함수(Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CERTPRIVATEKEY(Transact-SQL)
sys.certificates(Transact-SQL)