Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Den här funktionen returnerar den offentliga delen av ett certifikat i binärt format. Den här funktionen tar ett certifikat-ID som argument och returnerar det kodade certifikatet. Om du vill skapa ett nytt certifikat skickar du det binära resultatet till SKAPA CERTIFIKAT ... MED BINÄR.
Syntax
CERTENCODED ( cert_id )
Argument
cert_id
Certifikatets certificate_id. Hitta det här värdet i sys.certificates; funktionen CERT_ID (Transact-SQL) returnerar den också.
cert_id har datatypen int.
Returtyper
varbinary
Anmärkningar
Använd CERTENCODED och CERTPRIVATEKEY tillsammans för att returnera olika delar av ett certifikat i binär form.
Behörigheter
CERTENCODED- är offentligt tillgänglig.
Exempel
Enkelt exempel
Det här exemplet skapar ett certifikat med namnet Shipping04
och använder sedan funktionen CERTENCODED för att returnera certifikatets binära kodning. I det här exemplet anges certifikatets förfallodatum till 31 oktober 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. Kopiera ett certifikat till en annan databas
Det mer komplexa exemplet skapar två databaser, SOURCE_DB
och TARGET_DB
. Skapa sedan ett certifikat i SOURCE_DB
och kopiera sedan certifikatet till TARGET_DB
. Visa slutligen att data som krypterats i SOURCE_DB
kan dekrypteras i TARGET_DB
med hjälp av kopian av certifikatet.
Skapa exempelmiljön genom att skapa SOURCE_DB
och TARGET_DB
databaser och en huvudnyckel i varje databas. Skapa sedan ett certifikat i 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
Extrahera sedan den binära beskrivningen av certifikatet.
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
Skapa sedan det duplicerade certifikatet i TARGET_DB
-databasen. Ändra följande kod för att detta ska fungera och infoga de två binära värdena - @CERTENC och @CERTPVK - som returnerades i föregående steg. Omge inte dessa värden med citattecken.
-- 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;
Den här koden, som körs som en enda batch, visar att TARGET_DB
kan dekryptera data som ursprungligen krypterades i 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
Se även
Security Functions (Transact-SQL)
SKAPA CERTIFIKAT (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)