Megosztás a következőn keresztül:


CERTENCODED (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Ez a függvény egy tanúsítvány nyilvános részét adja vissza bináris formátumban. Ez a függvény argumentumként egy tanúsítványazonosítót használ, és visszaadja a kódolt tanúsítványt. Új tanúsítvány létrehozásához adja át a bináris eredményt TANÚSÍTVÁNY LÉTREHOZÁSA ... BINÁRIS.

Syntax

CERTENCODED ( cert_id )  

Arguments

cert_id
A tanúsítvány certificate_id. Keresse meg ezt az értéket a sys.certificatesben; a CERT_ID (Transact-SQL) függvény is visszaadja. cert_id adattípusa int.

Visszatérési típusok

varbinary

Remarks

Az CERTENCODED és CERTPRIVATEKEY együtt a tanúsítvány különböző részeinek bináris formában való visszaadásához.

Permissions

CERTENCODED nyilvánosan elérhető.

Examples

Egyszerű példa

Ez a példa létrehoz egy Shipping04nevű tanúsítványt, majd a CERTENCODED függvénnyel adja vissza a tanúsítvány bináris kódolását. Ez a példa a tanúsítvány lejárati dátumát 2040. október 31-ére állítja be.

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. Tanúsítvány másolása másik adatbázisba

Az összetettebb példa két adatbázist hoz létre, SOURCE_DB és TARGET_DB. Ezután hozzon létre egy tanúsítványt a SOURCE_DB, majd másolja a tanúsítványt a TARGET_DB. Végül mutassa be, hogy az SOURCE_DB titkosított adatok visszafejthetők TARGET_DB a tanúsítvány másolatával.

A példakörnyezet létrehozásához hozza létre a SOURCE_DB és TARGET_DB adatbázisokat, valamint egy főkulcsot az egyes adatbázisokban. Ezután hozzon létre egy tanúsítványt a SOURCE_DB.

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  

Ezután bontsa ki a tanúsítvány bináris leírását.

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  

Ezután hozza létre a duplikált tanúsítványt a TARGET_DB adatbázisban. Módosítsa a következő kódot úgy, hogy működjön, és szúrja be az előző lépésben visszaadott két bináris értéket ( @CERTENC és @CERTPVK). Ne vegye körül ezeket az értékeket idézőjelekkel.

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

Ez az egyetlen kötegként végrehajtott kód azt mutatja be, hogy TARGET_DB képes visszafejteni az eredetileg SOURCE_DBtitkosított adatokat.

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

Lásd még

Biztonsági funkciók (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)