CERTENCODED (Transact-SQL)

Devuelve la parte pública de un certificado en formato binario. Esta función toma un identificador de certificado y devuelve el certificado codificado. El resultado binario se puede pasar a CREATE CERTIFICATE … WITH BINARY para crear un nuevo certificado.

Sintaxis

CERTENCODED ( cert_id )

Argumentos

  • cert_id
    Es el certificate_id del certificado. Está disponible en sys.certificates o utilizando la función CERT_ID (Transact-SQL). cert_id es de tipo int

Tipos de valor devuelto

varbinary

Comentarios

CERTENCODED y CERTPRIVATEKEY se usan juntos para devolver diferentes partes de un certificado en formato binario.

Permisos

CERTENCODED está disponible para public.

Ejemplos

Ejemplo sencillo

En el ejemplo siguiente se crea un certificado denominado Shipping04 y se utiliza la función CERTENCODED para devolver la codificación binaria del certificado.

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.Copiar un certificado a otra base de datos

En el ejemplo más complejo siguiente se crean dos bases de datos, SOURCE_DB y TARGET_DB. El objetivo es crear un certificado en SOURCE_DB, copiarlo en TARGET_DB y, después, mostrar que los datos cifrados en SOURCE_DB se pueden descifrar en TARGET_DB mediante la copia del certificado.

Para crear el entorno de ejemplo, cree las bases de datos SOURCE_DB y TARGET_DB y una clave maestra en cada una. A continuación, cree un certificado en 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

Ahora extraiga la descripción binaria del certificado.

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

Cree el certificado duplicado en la base de datos TARGET_DB. Debe modificar el código siguiente, insertando los dos valores binarios devueltos en el paso anterior.

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

El siguiente código ejecutado como un solo lote muestra que los datos cifrados en SOURCE_DB se pueden descifrar en 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

Vea también

Referencia

Funciones de seguridad (Transact-SQL)

CREATE CERTIFICATE (Transact-SQL)

CERTPRIVATEKEY (Transact-SQL)

sys.certificates (Transact-SQL)