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)