CERTENCODED (Transact-SQL)
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Deze functie retourneert het openbare gedeelte van een certificaat in binaire indeling. Deze functie gebruikt een certificaat-id als argument en retourneert het gecodeerde certificaat. Als u een nieuw certificaat wilt maken, geeft u het binaire resultaat door aan CREATE CERTIFICATE ... MET BINARY.
Syntaxis
CERTENCODED ( cert_id )
Argumenten
cert_id
De certificate_id van het certificaat. Zoek deze waarde in sys.certificates; de CERT_ID (Transact-SQL) functie retourneert deze ook.
cert_id heeft het gegevenstype int.
Retourtypen
varbinaire
Opmerkingen
Gebruik CERTENCODED- en CERTPRIVATEKEY samen om, in binaire vorm, verschillende delen van een certificaat te retourneren.
Machtigingen
CERTENCODED- is openbaar beschikbaar.
Voorbeelden
Eenvoudig voorbeeld
In dit voorbeeld wordt een certificaat met de naam Shipping04
gemaakt en wordt vervolgens de functie CERTENCODED gebruikt om de binaire codering van het certificaat te retourneren. In dit voorbeeld wordt de vervaldatum van het certificaat ingesteld op 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. Een certificaat kopiëren naar een andere database
In het complexere voorbeeld worden twee databases gemaakt, SOURCE_DB
en TARGET_DB
. Maak vervolgens een certificaat in SOURCE_DB
en kopieer het certificaat vervolgens naar het TARGET_DB
. Ten slotte demonstreert u dat gegevens die zijn versleuteld in SOURCE_DB
kunnen worden ontsleuteld in TARGET_DB
met behulp van de kopie van het certificaat.
Als u de voorbeeldomgeving wilt maken, maakt u de SOURCE_DB
- en TARGET_DB
-databases en een hoofdsleutel in elke database. Maak vervolgens een certificaat in 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
Pak vervolgens de binaire beschrijving van het certificaat uit.
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
Maak vervolgens het dubbele certificaat in de TARGET_DB
-database. Wijzig de volgende code zodat dit werkt, waarbij de twee binaire waarden ( @CERTENC en @CERTPVK ) worden ingevoegd die in de vorige stap zijn geretourneerd. Plaats deze waarden niet tussen aanhalingstekens.
-- 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;
Deze code, uitgevoerd als één batch, laat zien dat TARGET_DB
oorspronkelijk versleutelde gegevens in SOURCE_DB
kan ontsleutelen.
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
Zie ook
beveiligingsfuncties (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)