Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Bu işlev, bir sertifikanın ortak bölümünü ikili biçimde döndürür. Bu işlev bağımsız değişken olarak bir sertifika kimliği alır ve kodlanmış sertifikayı döndürür. Yeni bir sertifika oluşturmak için ikili sonucu CREATE CERTIFICATE ... İKILI ILE.
Syntax
CERTENCODED ( cert_id )
Arguments
cert_id
Sertifikanın certificate_id . Bu değeri sys.certificates içinde bulun; CERT_ID (Transact-SQL) işlevi de işlevi döndürür.
cert_idint veri türüne sahiptir.
Dönüş türleri
varbinary
Remarks
Sertifikanın farklı bölümlerini ikili biçimde döndürmek için CERTENCODED ve CERTPRIVATEKEY değerlerini birlikte kullanın.
Permissions
CERTENCODED genel kullanıma açıktır.
Examples
Basit Örnek
Bu örnek adlı Shipping04bir sertifika oluşturur ve ardından sertifikanın ikili kodlamasını döndürmek için CERTENCODED işlevini kullanır. Bu örnek, sertifikanın süre sonu tarihini 31 Ekim 2040 olarak ayarlar.
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. Sertifikayı Başka Bir Veritabanına Kopyalama
Daha karmaşık örnek, SOURCE_DB ve TARGET_DBadlı iki veritabanı oluşturur. Ardından, içinde SOURCE_DBbir sertifika oluşturun ve sertifikayı öğesine TARGET_DBkopyalayın. Son olarak, içinde SOURCE_DB şifrelenen TARGET_DB verilerin şifresinin, sertifikanın kopyası kullanılarak çözülebileceğini gösterin.
Örnek ortamı oluşturmak için ve SOURCE_DB veritabanlarını TARGET_DB ve her veritabanında bir ana anahtar oluşturun. Ardından içinde SOURCE_DBbir sertifika oluşturun.
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
Ardından sertifikanın ikili açıklamasını ayıklayın.
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
Ardından veritabanında yinelenen sertifikayı TARGET_DB oluşturun. Bunun çalışması için aşağıdaki kodu değiştirin ve önceki adımda döndürülen iki ikili değeri @CERTENC@CERTPVK ekleyin. Bu değerleri tırnak içine alma.
-- 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;
Tek bir toplu iş olarak yürütülen bu TARGET_DB kod, başlangıçta içinde SOURCE_DBşifrelenen verilerin şifresini çözebildiğini gösterir.
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
Ayrıca bakınız
Güvenlik İşlevleri (Transact-SQL)
SERTİFİKA OLUŞTUR (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)