共用方式為


CERTENCODED (Transact-SQL)

以二進位格式傳回憑證的公開部分。 這個函數會使用憑證識別碼,並傳回編碼憑證。 二進位結果可以傳遞給 CREATE CERTIFICATE … WITH BINARY 來建立新的憑證。

適用於:SQL Server (SQL Server 2012 至目前版本)。

語法

CERTENCODED ( cert_id )

引數

  • cert_id
    憑證的 certificate_id。 這可從 sys.certificates 或是使用 CERT_ID (Transact-SQL) 函數取得。 cert_id 的型別為 int

傳回類型

varbinary

備註

CERTENCODED 和 CERTPRIVATEKEY 會一起用來傳回憑證的不同部分 (二進位格式)。

權限

CERTENCODED 可供 public 使用。

範例

簡單範例

下列範例會建立名為 Shipping04 的憑證,然後使用 CERTENCODED 函數傳回憑證的二進位編碼。

CREATE DATABASE TEST1;
GO
USE TEST1
CREATE CERTIFICATE Shipping04 
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records', 
EXPIRY_DATE = '20161031';
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 = 'S0URCE_DB KEY Pa$$W0rd';
GO
CREATE DATABASE TARGET_DB;
GO
USE TARGET_DB
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$W0rd in TARGET_DB';
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 資料庫中建立重複憑證。 您必須修改下列程式碼,插入上一個步驟傳回的兩個二進位值。

-- 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;

當做單一批次執行的下列程式碼會示範在 SOURCE_DB 中加密的資料可以在 TARGET_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

請參閱

參考

安全性函數 (Transact-SQL)

CREATE CERTIFICATE (Transact-SQL)

CERTPRIVATEKEY (Transact-SQL)

sys.certificates (Transact-SQL)