Bagikan melalui


CERTENCODED (Transact-SQL)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Fungsi ini mengembalikan bagian publik sertifikat dalam format biner. Fungsi ini mengambil ID sertifikat sebagai argumen, dan mengembalikan sertifikat yang dikodekan. Untuk membuat sertifikat baru, berikan hasil biner ke CREATE CERTIFICATE ... DENGAN BINER.

Sintaks

CERTENCODED ( cert_id )  

Argumen

cert_id
Certificate_id sertifikat. Temukan nilai ini di sys.certificates; fungsi CERT_ID (Transact-SQL) juga akan mengembalikannya. cert_id memiliki int tipe data.

Jenis yang dikembalikan

varbinary

Keterangan

Gunakan CERTENCODED dan CERTPRIVATEKEY bersama-sama untuk mengembalikan, dalam bentuk biner, bagian sertifikat yang berbeda.

Izin

CERTENCODED tersedia untuk umum.

Contoh

Contoh sederhana

Contoh ini membuat sertifikat bernama Shipping04, lalu menggunakan fungsi CERTENCODED untuk mengembalikan pengodean biner sertifikat. Contoh ini menetapkan tanggal kedaluwarsa sertifikat menjadi 31 Oktober 2040.

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. Menyalin Sertifikat ke Database Lain

Contoh yang lebih kompleks membuat dua database, SOURCE_DB dan TARGET_DB. Kemudian, buat sertifikat di SOURCE_DB, lalu salin sertifikat ke TARGET_DB. Terakhir, tunjukkan bahwa data yang dienkripsi SOURCE_DB dapat didekripsi dalam TARGET_DB menggunakan salinan sertifikat.

Untuk membuat lingkungan contoh, buat SOURCE_DB database dan TARGET_DB , dan kunci master di setiap database. Kemudian, buat sertifikat di 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  

Selanjutnya, ekstrak deskripsi biner sertifikat.

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  

Kemudian, buat sertifikat duplikat dalam TARGET_DB database. Ubah kode berikut agar ini berfungsi, menyisipkan dua nilai biner - @CERTENC dan @CERTPVK - dikembalikan di langkah sebelumnya. Jangan kelilingi nilai-nilai ini dengan tanda kutip.

-- 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;  

Kode ini, dijalankan sebagai satu batch, menunjukkan bahwa dapat mendekripsi data yang TARGET_DB awalnya dienkripsi dalam SOURCE_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  

Lihat juga

Fungsi Keamanan (T-SQL)
BUAT SERTIFIKAT (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)