CERTENCODED (Transact-SQL)
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
SQL Database v Microsoft Fabric
Tato funkce vrátí veřejnou část certifikátu v binárním formátu. Tato funkce přebírá ID certifikátu jako argument a vrací kódovaný certifikát. Chcete-li vytvořit nový certifikát, předejte binární výsledek CREATE CERTIFICATE ... S BINÁRNÍm.
Syntax
CERTENCODED ( cert_id )
Argumenty
cert_id
certificate_id certifikátu. Najděte tuto hodnotu v sys.certificates; funkce CERT_ID (Transact-SQL) ji vrátí také.
cert_id má datový typ int.
Návratové typy
varbinární
Poznámky
Pomocí CERTENCODED a CERTPRIVATEKEY vrátit různé části certifikátu v binární podobě.
Dovolení
CERTENCODED je veřejně dostupný.
Příklady
Jednoduchý příklad
Tento příklad vytvoří certifikát s názvem Shipping04
a pak použije funkci CERTENCODED k vrácení binárního kódování certifikátu. Tento příklad nastaví datum vypršení platnosti certifikátu na 31. října 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. Kopírování certifikátu do jiné databáze
Složitější příklad vytvoří dvě databáze, SOURCE_DB
a TARGET_DB
. Potom v SOURCE_DB
vytvořte certifikát a zkopírujte ho do TARGET_DB
. Nakonec předveďte, že data zašifrovaná v SOURCE_DB
je možné dešifrovat v TARGET_DB
pomocí kopie certifikátu.
Pokud chcete vytvořit ukázkové prostředí, vytvořte SOURCE_DB
a TARGET_DB
databáze a hlavní klíč v každé databázi. Potom v SOURCE_DB
vytvořte certifikát .
USE master;
GO
CREATE DATABASE SOURCE_DB;
GO
USE SOURCE_DB;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>'; -- source database key password
GO
CREATE DATABASE TARGET_DB;
GO
USE TARGET_DB
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>'; -- password in target database
GO
-- Create a certificate in SOURCE_DB
USE SOURCE_DB;
GO
CREATE CERTIFICATE SOURCE_CERT WITH SUBJECT = 'SOURCE_CERTIFICATE';
GO
Dále extrahujte binární popis certifikátu.
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
Potom v databázi TARGET_DB
vytvořte duplicitní certifikát. Upravte následující kód, aby fungoval, vložte dvě binární hodnoty – @CERTENC a @CERTPVK – vrácené v předchozím kroku. Nezabíjejte tyto hodnoty do uvozovek.
-- 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;
Tento kód spuštěný jako jedna dávka ukazuje, že TARGET_DB
může dešifrovat data původně zašifrovaná v 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
Viz také
funkce zabezpečení (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)