Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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)