次の方法で共有


CERTENCODED (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

この関数は、証明書の公開部分をバイナリ形式で返します。 この関数は、引数として証明書の ID を受け取り、エンコードされた証明書を返します。 証明書を作成するには、バイナリの結果を CREATE CERTIFICATE …WITH BINARY に渡します。

構文

CERTENCODED ( cert_id )  

引数

cert_id
証明書の certificate_id。 sys.certificates; でこの値を見つけます。CERT_ID (Transact-SQL) 関数もこの値を返します。 cert_idint データ型です。

戻り値の型

varbinary

解説

CERTENCODEDCERTPRIVATEKEY を一緒に使用すると、バイナリの形式で証明書の異なる部分を返します。

アクセス許可

CERTENCODED はパブリックに使用できます。

簡単な例

この例では、Shipping04 という名前の証明書を作成した後、その証明書のバイナリ エンコードを CERTENCODED 関数を使用して返します。 この例では、証明書の有効期限を 2040 年 10 月 31 日に設定します。

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. 別のデータベースへの証明書のコピー

次のより複雑な例では、2 つのデータベース (SOURCE_DBTARGET_DB) を作成します。 その後で、SOURCE_DB 内に証明書を作成し、証明書を TARGET_DB にコピーします。 最後に、SOURCE_DB で暗号化されたデータを証明書のコピーを使用して TARGET_DB で暗号化解除できることを示します。

この例の環境を作成するために、SOURCE_DBTARGET_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 データベースに証明書の複製を作成します。 この作業のために次のコードを変更して、前の手順で返される 2 つのバイナリ値 (@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 DecriptedTextInTarget;   
GO  

関連項目

セキュリティ関数 (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CERTPRIVATEKEY (Transact-SQL)
sys.certificates (Transact-SQL)