CERTENCODED (Transact-SQL)
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
banco de dados SQL no Microsoft Fabric
Esta função retorna a parte pública de um certificado em formato binário. Esta função usa uma ID de certificado como um argumento e retorna o certificado codificado. Para criar um novo certificado, passe o resultado binário para CREATE CERTIFICATE ... COMBINÁRIO .
Sintaxe
CERTENCODED ( cert_id )
Argumentos
cert_id
O certificate_id do certificado. Encontre esse valor em sys.certificates; a função CERT_ID (Transact-SQL) também a retornará.
cert_id tem o tipo de dados int.
Tipos de devolução
varbinary
Comentários
Use CERTENCODED e CERTPRIVATEKEY juntos para retornar, em forma binária, diferentes partes de um certificado.
Permissões
CERTENCODED está disponível publicamente.
Exemplos
Exemplo simples
Este exemplo cria um certificado chamado Shipping04
e, em seguida, usa a função CERTENCODED para retornar a codificação binária do certificado. Este exemplo define a data de expiração do certificado como 31 de outubro de 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. Copiando um certificado para outro banco de dados
O exemplo mais complexo cria dois bancos de dados, SOURCE_DB
e TARGET_DB
. Em seguida, crie um certificado no SOURCE_DB
e, em seguida, copie o certificado para o TARGET_DB
. Finalmente, demonstre que os dados criptografados em SOURCE_DB
podem ser descriptografados em TARGET_DB
usando a cópia do certificado.
Para criar o ambiente de exemplo, crie os bancos de dados SOURCE_DB
e TARGET_DB
e uma chave mestra em cada banco de dados. Em seguida, crie um certificado no SOURCE_DB
.
USE master;
GO
CREATE DATABASE SOURCE_DB;
GO
USE SOURCE_DB;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>'; -- source database key password
GO
CREATE DATABASE TARGET_DB;
GO
USE TARGET_DB
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>'; -- password in target database
GO
-- Create a certificate in SOURCE_DB
USE SOURCE_DB;
GO
CREATE CERTIFICATE SOURCE_CERT WITH SUBJECT = 'SOURCE_CERTIFICATE';
GO
Em seguida, extraia a descrição binária do 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
Em seguida, crie o certificado duplicado no banco de dados TARGET_DB
. Modifique o código a seguir para que isso funcione, inserindo os dois valores binários - @CERTENC e @CERTPVK - retornados na etapa anterior. Não rodeie estes valores de aspas.
-- 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;
Esse código, executado como um único lote, demonstra que TARGET_DB
pode descriptografar dados originalmente criptografados em 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
Ver também
Funções de segurança (Transact-SQL)
CRIAR CERTIFICADO (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)