CERTENCODED (Transact-SQL)

Gibt den öffentlichen Teil eines Zertifikats im Binärformat zurück. Diese Funktion akzeptiert eine Zertifikat-ID und gibt das codierte Zertifikat zurück. Das binäre Ergebnis kann an CREATE CERTIFICATE … WITH BINARY übergeben werden, um ein neues Zertifikat zu erstellen.

Syntax

CERTENCODED ( cert_id )

Argumente

  • cert_id
    Die certificate_id des Zertifikats. Diese ist in sys.certificates verfügbar oder kann mit der Funktion CERT_ID (Transact-SQL) abgerufen werden. cert_id ist vom Typ int

Rückgabetypen

varbinary

Hinweise

CERTENCODED und CERTPRIVATEKEY werden zusammen verwendet, um andere Teile eines Zertifikats in binärer Form zurückzugeben.

Berechtigungen

CERTENCODED steht für public zur Verfügung.

Beispiele

Einfaches Beispiel

Im folgenden Beispiel wird ein Zertifikat mit dem Namen Shipping04 erstellt. Dann wird die CERTENCODED-Funktion verwendet, um die binäre Codierung des Zertifikats zurückzugeben.

CREATE DATABASE TEST1;
GO
USE TEST1
CREATE CERTIFICATE Shipping04 
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records', 
EXPIRY_DATE = '20161031';
GO
SELECT CERTENCODED(CERT_ID('Shipping04'));

B.Kopieren eines Zertifikats in eine andere Datenbank

Im folgenden etwas komplizierteren Beispiel werden zwei Datenbanken, SOURCE_DB und TARGET_DB, erstellt. Das Ziel ist, in der Datenbank SOURCE_DB ein Zertifikat zu erstellen und das Zertifikat in die Datenbank TARGET_DB zu kopieren. Dann wird veranschaulicht, dass in SOURCE_DB verschlüsselte Daten mithilfe der Kopie des Zertifikats in TARGET_DB entschlüsselt werden können.

Erstellen Sie die Datenbanken SOURCE_DB und TARGET_DB und einen Hauptschlüssel in jeder Datenbank, um die Beispielumgebung zu erzeugen. Erstellen Sie dann in SOURCE_DB ein Zertifikat.

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 jetzt die binäre Beschreibung des Zertifikats.

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 das doppelte Zertifikat in der Datenbank TARGET_DB. Sie müssen den folgenden Code ändern, indem Sie die beiden im vorherigen Schritt zurückgegebenen Binärwerte einfügen.

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

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

Siehe auch

Verweis

Sicherheitsfunktionen (Transact-SQL)

CREATE CERTIFICATE (Transact-SQL)

CERTPRIVATEKEY (Transact-SQL)

sys.certificates (Transact-SQL)