Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Эта функция возвращает открытую часть сертификата в двоичном формате. Эта функция принимает в качестве аргумента идентификатор сертификата и возвращает закодированный сертификат. Чтобы создать новый сертификат, передайте двоичный результат в CREATE CERTIFICATE ... С ДВОИЧНЫМ ФАЙЛОМ.
Syntax
CERTENCODED ( cert_id )
Arguments
cert_id
Идентификатор certificate_id сертификата. Это значение можно найти в sys.certificates. Его также возвращает функция CERT_ID (Transact-SQL).
cert_id имеет тип данных int.
Типы возвращаемых данных
varbinary
Remarks
Функции CERTENCODED и CERTPRIVATEKEY используются совместно для возврата различных составляющих сертификата в двоичной форме.
Permissions
Функция CERTENCODED общедоступна.
Examples
Простой пример
В этом примере создается сертификат с именем Shipping04, а затем функция CERTENCODED используется для возврата сертификата в двоичной кодировке. В этом примере устанавливается дата окончания срока действия сертификата 31 октября 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. Копирует сертификат в другую базу данных.
В этом более сложном примере создаются две базы данных: SOURCE_DB и TARGET_DB. Затем в SOURCE_DB создается сертификат, который копируется в TARGET_DB. В заключение демонстрируется, что данные, зашифрованные в SOURCE_DB, могут быть расшифрованы в TARGET_DB с использованием этого сертификата.
Чтобы создать среду для примера, создайте базы данных SOURCE_DB и TARGET_DB, а также главный ключ в каждой из них. Затем создайте сертификат в 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
Далее извлеките двоичное описание сертификата.
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
После этого создайте дубликат сертификата в базе данных TARGET_DB. Измените следующий код, включив в него два двоичных значения, полученных на предыдущем шаге: @CERTENC и @CERTPVK. Не заключайте эти значения в кавычки.
-- 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;
Этот код выполняется как единый пакет и показывает, что зашифрованные в TARGET_DB данные можно расшифровать в 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
См. также
Функция безопасности (Transact-SQL)
СОЗДАТЬ СЕРТИФИКАТ (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
системные сертификаты (Transact-SQL)