Partager via


CERTENCODED (Transact-SQL)

Retourne la partie publique d'un certificat au format binaire. Cette fonction accepte un ID de certificat et retourne le certificat encodé. Le résultat binaire peut être passé à CREATE CERTIFICATE … WITH BINARY pour créer un nouveau certificat.

Syntaxe

CERTENCODED ( cert_id )

Arguments

  • cert_id
    certificate_id du certificat. Disponible à partir de sys.certificates ou à l'aide de la fonction CERT_ID (Transact-SQL). cert_id est de type int

Types de retour

varbinary

Notes

CERTENCODED et CERTPRIVATEKEY sont utilisés conjointement pour retourner les différentes parties d'un certificat sous forme binaire.

Autorisations

CERTENCODED est accessible à public.

Exemples

Exemple simple

L'exemple suivant crée un certificat nommé Shipping04 puis utilise la fonction CERTENCODED pour retourner l'encodage binaire du certificat.

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.Copie d'un certificat dans une autre base de données

Cet exemple plus complexe crée deux bases de données, SOURCE_DB et TARGET_DB. L'objectif est de créer un certificat dans SOURCE_DB, de le copier dans TARGET_DB, puis d'illustrer que les données chiffrées dans SOURCE_DB peuvent être déchiffrées dans TARGET_DB à l'aide de la copie du certificat.

Pour créer l'environnement de l'exemple, créez les bases de données SOURCE_DB et TARGET_DB, et une clé principale dans chacune d'elles. Créez ensuite un certificat dans 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

Extrayez maintenant la description binaire du certificat.

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

Créez le certificat dupliqué dans la base de données TARGET_DB. Vous devez modifier le code suivant, en insérant les deux valeurs binaires retournées à l'étape précédente.

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

Le code suivant exécuté en tant que lot unique indique que les données chiffrées dans SOURCE_DB peuvent être déchiffrées dans TARGET_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

Voir aussi

Référence

Fonctions de sécurité (Transact-SQL)

CREATE CERTIFICATE (Transact-SQL)

CERTPRIVATEKEY (Transact-SQL)

sys.certificates (Transact-SQL)