Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base 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 .
Syntax
CERTENCODED ( cert_id )
Arguments
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
Remarks
Use CERTENCODED e CERTPRIVATEKEY juntos para retornar, em forma binária, diferentes partes de um certificado.
Permissions
CERTENCODED está disponível publicamente.
Examples
Exemplo simples
Este exemplo cria um certificado chamado Shipping04e, 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_DBe, 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 DecryptedTextInTarget;
GO
Consulte também
Funções de segurança (Transact-SQL)
CRIAR CERTIFICADO (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)