CERTENCODED (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Banco de Dados SQL no Microsoft Fabric
Essa função retorna a parte pública de um certificado em formato binário. Essa função usa uma ID de certificado como argumento e retorna o certificado codificado. Para criar um certificado, passe o resultado binário para CREATE CERTIFICATE... WITH BINARY.
Sintaxe
CERTENCODED ( cert_id )
Argumentos
cert_id
A certificate_id do certificado. Encontre esse valor em sys.certificates; a função CERT_ID (Transact-SQL) o retornará também. cert_id tem um tipo de dados int.
Tipos de retorno
varbinary
Comentários
Use CERTENCODED e CERTPRIVATEKEY em conjunto para retornar, em formato binário, 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 em 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, depois, copie o certificado para o TARGET_DB
. Por fim, demonstre que os dados criptografados no SOURCE_DB
podem ser descriptografados no 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 = '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
Depois, 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 isto funcione, inserindo os dois valores binários – @CERTENC e @CERTPVK – retornados na etapa anterior. Não coloque esses valores entre 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 o TARGET_DB
pode descriptografar os dados criptografados originalmente no 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
Confira também
Funções de segurança (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)