2 台のサーバーでの同じ対称キーの作成

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

このトピックでは、Transact-SQL を使用して SQL Server の 2 台のサーバーに同じ対称キーを作成する方法について説明します。 暗号化テキストの暗号化を解除するには、暗号化に使用したキーが必要です。 1 つのデータベースで暗号化と暗号化解除の両方が行われる場合、データベースに格納されているキーを、権限に応じて暗号化と暗号化解除の両方に使用できます。 一方、暗号化と暗号化解除が別々のデータベースまたは別々のサーバーで行われる場合、一方のデータベースに格納されているキーを他方のデータベースで使用することはできません。

開始する前に

制限事項と制約事項

  • 対称キーを作成するときには、証明書、パスワード、対称キー、非対称キー、PROVIDER のうち少なくとも 1 つを使用して対称キーを暗号化する必要があります。 キーには種類ごとの暗号化を複数指定できます。 つまり、1 つの対称キーを、複数の証明書、パスワード、対称キー、および非対称キーを使用して同時に暗号化できます。

  • データベースのマスター キーの公開キーではなく、パスワードを使用して対称キーを暗号化する場合は、TRIPLE DES 暗号化アルゴリズムが使用されます。 このため、AES など、強力な暗号化アルゴリズムで作成されたキーでも、キー自身はそれより弱いアルゴリズムで保護されます。

セキュリティ

アクセス許可

データベースに対する ALTER ANY SYMMETRIC KEY 権限が必要です。 AUTHORIZATION を指定する場合は、データベース ユーザーに対する IMPERSONATE 権限、またはアプリケーション ロールに対する ALTER 権限が必要です。 証明書または非対称キーを使用して暗号化する場合は、証明書または非対称キーに対する VIEW DEFINITION 権限が必要です。 対称キーを所有できるのは、Windows ログイン、 SQL Server ログイン、およびアプリケーション ロールだけです。 グループとロールは対称キーを所有できません。

Transact-SQL の使用

2 台のサーバーに同じ対称キーを作成するには

  1. オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の 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  
    
  4. 別のサーバー インスタンスに接続し、別のクエリ ウィンドウを開き、前述の SQL ステートメントを実行して、そのサーバーに同じキーを作成します。

  5. 最初のサーバーで次の 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  
    
  6. 他方のサーバーで、上の SELECT ステートメントの結果を次のコードの @blob 値として貼り付け、次のコードを実行して、このキーで暗号化テキストの暗号化を解除できることを確認します。

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

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

SQL Server 2017 CU2 における暗号化の変更

SQL Server 2016 では、その暗号化処理に SHA1 ハッシュ アルゴリズムが使用されます。 SQL Server 2017 以降は、代わりに SHA2 が使用されます。 つまり、SQL Server 2016 で暗号化されたアイテムを SQL Server 2017 インストールで復号化するには、追加の手順が必要な場合があります。 追加の手順を次に示します。

  • SQL Server 2017 が累積的な更新プログラム 2 (CU2) 以上に更新されていることを確認します。
  • CU2 をインストールした後、SQL Server 2017 でトレース フラグ 4631 を有効にします: DBCC TRACEON(4631, -1);
    • トレース フラグ 4631 は SQL Server 2017 の新機能です。 SQL Server 2017 でマスター キー、証明書、または対称キーを作成するには、まずトレース フラグ 4631 をグローバルに ON にする必要があります。 これにより、作成したこれらのアイテムが、SQL Server 2016 以前のバージョンと相互運用できるようになります。 このトレース フラグは、SHA2 から派生したキーを使用してデータの再暗号化を行うために、一時的にのみ有効にする必要があります。

詳細については、次を参照してください。

関連項目