CERTENCODED (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Diese Funktion gibt den öffentlichen Teil eines Zertifikats im Binärformat zurück. Diese Funktion akzeptiert eine Zertifikat-ID als Argument und gibt das codierte Zertifikat zurück. Zum Erstellen eines neuen Zertifikats übergeben Sie das binäre Ergebnis an CREATE CERTIFICATE ... WITH BINARY.
Syntax
CERTENCODED ( cert_id )
Argumente
CERT_ID
Die certificate_id des Zertifikats. Diesen Wert finden Sie in „sys.certificates“. Er wird auch von der Funktion CERT_ID (Transact-SQL) zurückgegeben. cert-id weist den Datentyp int auf.
Rückgabetypen
varbinary
Bemerkungen
CERTENCODED und CERTPRIVATEKEY werden zusammen verwendet, um andere Teile eines Zertifikats in binärer Form zurückzugeben.
Berechtigungen
CERTENCODED ist öffentlich verfügbar.
Beispiele
Einfaches Beispiel
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. In diesem Beispiel wird festgelegt, dass das Zertifikat bis zum 31. Oktober 2040 gültig ist.
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. Kopieren eines Zertifikats in eine andere Datenbank
Im etwas komplexeren Beispiel werden zwei Datenbanken, SOURCE_DB
und TARGET_DB
, erstellt. Erstellen Sie anschließend ein Zertifikat in der SOURCE_DB
, und kopieren Sie dann das Zertifikat in die 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.
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 anschließend 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 dann das Zertifikatduplikat in der Datenbank TARGET_DB
. Ä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. Schließen Sie diese Werte nicht in Anführungszeichen ein.
-- 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
Sicherheitsfunktionen (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)