CERTENCODED (Transact-SQL)CERTENCODED (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Esta función devuelve la parte pública de un certificado en formato binario.This function returns the public portion of a certificate in binary format. Esta función toma un identificador de certificado como argumento y devuelve el certificado codificado.This function takes a certificate ID as an argument, and returns the encoded certificate. Para crear un certificado nuevo, pase el resultado binario a CREATE CERTIFICATE ... WITH BINARY.To create a new certificate, pass the binary result to CREATE CERTIFICATE ... WITH BINARY.

SintaxisSyntax

CERTENCODED ( cert_id )  

ArgumentosArguments

cert_idcert_id
certificate_id del certificado.The certificate_id of the certificate. Busque este valor en sys.certificates; la función CERT_ID (Transact-SQL) también lo devolverá.Find this value in sys.certificates; the CERT_ID (Transact-SQL) function will return it as well. cert_id tiene el tipo de datos int.cert_id has data type int.

Tipos de valores devueltosReturn types

varbinaryvarbinary

NotasRemarks

Use CERTENCODED y CERTPRIVATEKEY juntos para devolver diferentes partes de un certificado en formato binario.Use CERTENCODED and CERTPRIVATEKEY together to return, in binary form, different portions of a certificate.

PermisosPermissions

CERTENCODED está disponible públicamente.CERTENCODED is publicly available.

EjemplosExamples

Ejemplo sencilloSimple Example

En este ejemplo se crea un certificado denominado Shipping04 y se usa la función CERTENCODED para devolver la codificación binaria del certificado.This example creates a certificate named Shipping04, and then uses the CERTENCODED function to return the binary encoding of the certificate. Este ejemplo establece la fecha de expiración del certificado en 31 de octubre de 2040.This example sets the certificate expiry date to October 31, 2040.

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.B. Copiar un certificado a otra base de datosCopying a Certificate to Another Database

En el ejemplo más complejo se crean dos bases de datos, SOURCE_DB y TARGET_DB.The more complex example creates two databases, SOURCE_DB and TARGET_DB. Luego se crea un certificado en SOURCE_DB y se copia en TARGET_DB.Then, create a certificate in SOURCE_DB, and then copy the certificate to the TARGET_DB. Por último, se muestra que los datos cifrados en SOURCE_DB se pueden descifrar en TARGET_DB con la copia del certificado.Finally, demonstrate that data encrypted in SOURCE_DB can be decrypted in TARGET_DB using the copy of the certificate.

Para crear el entorno de ejemplo, cree las bases de datos SOURCE_DB y TARGET_DB y una clave maestra en cada base de datos.To create the example environment, create the SOURCE_DB and TARGET_DB databases, and a master key in each database. Luego, cree un certificado en SOURCE_DB.Then, create a certificate in 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  

Después, extraiga la descripción binaria del certificado.Next, extract the binary description of the certificate.

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  

Luego, cree el certificado duplicado en la base de datos TARGET_DB.Then, create the duplicate certificate in the TARGET_DB database. Modifique el código siguiente para que funcione. Para ello, inserte los dos valores binarios (@CERTENC y @CERTPVK) devueltos en el paso anterior.Modify the following code for this to work, inserting the two binary values - @CERTENC and @CERTPVK - returned in the previous step. No especifique estos valores entre comillas.Don't surround these values with quotes.

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

En este código, que se ejecuta como un solo lote, se muestra que TARGET_DB puede descifrar datos que se cifraron en SOURCE_DB.This code, executed as a single batch, demonstrates that TARGET_DB can decrypt data originally encrypted in SOURCE_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énSee also

Funciones de seguridad (Transact-SQL)Security Functions (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)CREATE CERTIFICATE (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)sys.certificates (Transact-SQL)