CERTENCODED (Transact-SQL)CERTENCODED (Transact-SQL)

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL DatabaseAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database

Diese Funktion gibt den öffentlichen Teil eines Zertifikats im Binärformat zurück.This function returns the public portion of a certificate in binary format. Diese Funktion akzeptiert eine Zertifikat-ID als Argument und gibt das codierte Zertifikat zurück.This function takes a certificate ID as an argument, and returns the encoded certificate. Zum Erstellen eines neuen Zertifikats übergeben Sie das binäre Ergebnis an CREATE CERTIFICATE ... WITH BINARY.To create a new certificate, pass the binary result to CREATE CERTIFICATE ... WITH BINARY.

SyntaxSyntax

CERTENCODED ( cert_id )  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumenteArguments

CERT_IDcert_id
Die certificate_id des Zertifikats.The certificate_id of the certificate. Diesen Wert finden Sie in „sys.certificates“. Er wird auch von der Funktion CERT_ID (Transact-SQL) zurückgegeben.Find this value in sys.certificates; the CERT_ID (Transact-SQL) function will return it as well. cert-id weist den Datentyp int auf.cert_id has data type int.

RückgabetypenReturn types

varbinaryvarbinary

BemerkungenRemarks

CERTENCODED und CERTPRIVATEKEY werden zusammen verwendet, um andere Teile eines Zertifikats in binärer Form zurückzugeben.Use CERTENCODED and CERTPRIVATEKEY together to return, in binary form, different portions of a certificate.

BerechtigungenPermissions

CERTENCODED ist öffentlich verfügbar.CERTENCODED is publicly available.

BeispieleExamples

Einfaches BeispielSimple Example

In diesem Beispiel wird ein Zertifikat mit dem Namen Shipping04 erstellt. Dann wird die Funktion CERTENCODED verwendet, um die binäre Codierung des Zertifikats zurückzugeben.This example creates a certificate named Shipping04, and then uses the CERTENCODED function to return the binary encoding of the certificate. In diesem Beispiel wird festgelegt, dass das Zertifikat bis zum 31. Oktober 2040 gültig ist.This example sets the certificate expiry date to October 31, 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.B. Kopieren eines Zertifikats in eine andere DatenbankCopying a Certificate to Another Database

Im etwas komplexeren Beispiel werden zwei Datenbanken, SOURCE_DB und TARGET_DB, erstellt.The more complex example creates two databases, SOURCE_DB and TARGET_DB. Erstellen Sie anschließend ein Zertifikat in der SOURCE_DB, und kopieren Sie dann das Zertifikat in die TARGET_DB.Then, create a certificate in SOURCE_DB, and then copy the certificate to the TARGET_DB. Prüfen Sie zum Schluss, ob die in der SOURCE_DB verschlüsselten Daten in der TARGET_DB mit der Kopie des Zertifikats entschlüsselt werden können.Finally, demonstrate that data encrypted in SOURCE_DB can be decrypted in TARGET_DB using the copy of the certificate.

Erstellen Sie die Datenbanken SOURCE_DB und TARGET_DB und einen Hauptschlüssel in jeder Datenbank, um die Beispielumgebung zu erzeugen.To create the example environment, create the SOURCE_DB and TARGET_DB databases, and a master key in each database. Erstellen Sie dann in SOURCE_DB ein Zertifikat.Then, create a certificate in 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  

Extrahieren Sie anschließend die binäre Beschreibung des Zertifikats.Next, extract the binary description of the certificate.

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  

Erstellen Sie dann das Zertifikatduplikat in der Datenbank TARGET_DB.Then, create the duplicate certificate in the TARGET_DB database. Ändern Sie den folgenden Code, indem Sie die beiden im vorherigen Schritt zurückgegebenen Binärwerte @CERTENC und @CERTPVK einfügen. Nur dann funktionieren die vorherigen Schritte.Modify the following code for this to work, inserting the two binary values - @CERTENC and @CERTPVK - returned in the previous step. Schließen Sie diese Werte nicht in Anführungszeichen ein.Don't surround these values with quotes.

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

Mit dem folgenden Code, der wie ein einzelner Stapel ausgeführt wird, wird veranschaulicht, dass in SOURCE_DB verschlüsselte Daten in TARGET_DB entschlüsselt werden können.This code, executed as a single batch, demonstrates that TARGET_DB can decrypt data originally encrypted in 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  

Weitere InformationenSee also

Sicherheitsfunktionen (Transact-SQL)Security Functions (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)CREATE CERTIFICATE (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)sys.certificates (Transact-SQL)