Share via


2 台のサーバーで同じ対称キーを作成する方法

更新 : 2006 年 12 月 12 日

暗号化テキストの暗号化を解除するには、暗号化に使用したキーが必要です。1 つのデータベースで暗号化と暗号化解除の両方が行われる場合、データベースに格納されているキーを、権限に応じて暗号化と暗号化解除の両方に使用できます。一方、暗号化と暗号化解除が別々のデータベースまたは別々のサーバーで行われる場合、一方のデータベースに格納されているキーを他方のデータベースで使用することはできません。ここでは、2 つの異なるサーバー上のデータベースに共通の対称キーを設定する方法について説明します。

ms366281.security(ja-jp,SQL.90).gifセキュリティ メモ :
2 つのサーバー間でネットワーク接続を介してキー作成データ (KEY_SOURCE、ALGORITHM、IDENTITY_VALUE) を渡す必要がある場合は、必ずネットワーク接続を暗号化してください。たとえば、SSL や IPSec を使用します。適切なネットワークの暗号化方法を選択して構成するには、オペレーティング システムのドキュメントを参照してください。

概要

同じ対称キーを作成することは難しくありません。同じ KEY_SOURCE、ALGORITHM、および IDENTITY_VALUE キー オプションを使用して作成された対称キーは同じになります。対称キーを作成する前に、SQL Server のキー管理メカニズムが初期化されていることを確認してください。このメカニズムがまだ存在していない場合は、データベースのマスタ キーを作成して自動キー管理を有効にし、対称キーの暗号化に使用する証明書を作成します。必要に応じて、対称キーをパスワードで保護することもできます。詳細については、「CREATE SYMMETRIC KEY (Transact-SQL)」を参照してください。

次の例では、2 台のサーバーに同じ対称キーを作成します。この例では、AES_256 暗号化アルゴリズムを使用します。Windows XP および Windows Server 2000 では AES 暗号化アルゴリズムはサポートされていないため、TRIPLE_DES などの他のアルゴリズムを指定する必要があります。

  1. 次の CREATE MASTER KEY、CREATE CERTIFICATE、および CREATE SYMMETRIC KEY ステートメントを両方のサーバーで実行し、キーを作成します。

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My p@55w0Rd';
    GO
    CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection';
    GO
    CREATE SYMMETRIC KEY [key_DataShare] WITH
        KEY_SOURCE = 'My key generation bits. This is a shared secret!',
        ALGORITHM = AES_256, 
        IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret'
        ENCRYPTION BY CERTIFICATE [cert_keyProtection];
    GO
    
  2. 初めに、一方のサーバーで OPEN SYMMETRIC KEY ステートメントおよび SELECT ステートメントを実行してキーをテストします。

    OPEN SYMMETRIC KEY [key_DataShare] 
        DECRYPTION BY CERTIFICATE cert_keyProtection;
    GO
    SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' )
    GO
    -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3
    
  3. 他方のサーバーで、上の SELECT ステートメントの結果を次のコードの @blob 値として貼り付け、次のコードを実行して、このキーで暗号化テキストの暗号化を解除できることを確認します。

    OPEN SYMMETRIC KEY [key_DataShare] 
        DECRYPTION BY CERTIFICATE cert_keyProtection;
    GO
    DECLARE @blob varbinary(8000);
    SET @blob = SELECT CONVERT(varchar(8000), decryptbykey(@blob));
    GO
    
  4. 両方のサーバーで対称キーを終了します。

    CLOSE SYMMETRIC KEY [key_DataShare];
    GO
    

参照

関連項目

暗号化階層

その他の技術情報

CREATE MASTER KEY (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CREATE SYMMETRIC KEY (Transact-SQL)
EncryptByKey (Transact-SQL)
DecryptByKey (Transact-SQL)
暗号化アルゴリズムの選択

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

変更内容 :
  • 例を修正しました。

2006 年 4 月 14 日

変更内容 :
  • 導入部分を明確にしました。