次の方法で共有


データベースで BitLocker 回復データが暗号化されている場合の SQL Always On

SQL Always Onの場合は、「データベースの回復データを暗号化する」の手順を使用して BitLocker 情報を暗号化する場合は、追加の手順が必要です。 追加の手順では、フェールオーバー イベントが発生したときに、すべてのAlways On ノードでデータベース マスター キー (DMK) を自動的に開くことができます。 次の手順では、手動による介入なしで BitLocker キーをシームレスに取得できます。

データベースで BitLocker 回復データが暗号化される場合の SQL Always Onの概要

SQL Server階層型インフラストラクチャを使用してデータを暗号化し、「暗号化階層」で詳しく説明します。

  • サイト マスター キー (SMK) - このキーはインスタンスごとのキーであり、各SQL Server Always On ノードに固有であり、レプリケートされません。 これは、データベース マスター キーの暗号化に使用されます。
  • データベース マスター キー (DMK) - このキーはデータベースに格納され、レプリケートされます。 これは、BitLockerManagement_CERTの暗号化に使用されます。
  • BitLockerManagement_CERT - この証明書はデータベースに格納され、レプリケートされます。 これは、回復キーなどの BitLocker 関連のデータを暗号化するために使用されます。

SMK は DMK パスワードを暗号化します。 SMK はノード固有です。 フェールオーバー イベントが発生すると、新しいプライマリ ノードは別の SMK で暗号化されているため、DMK パスワードの暗号化を解除できません。 各ノードで DMK パスワードを設定すると、ノードはフェールオーバー時にパスワードの暗号化を解除できます。

注:

BitLockerManagement_CERTは列の暗号化を実行します。 この証明書が紛失または削除された場合、または暗号化された DMK が失われた場合、BitLocker キーをエスクローして再暗号化する必要があります。

データベース マスター キー (DMK) パスワードがわかっている場合

Configuration Manager データベースをホストする可用性グループ内の各ノードで、次のコマンドを実行します。

重要

コマンドは次のとおりです。

  • passwordを任意の強力なパスワードに置き換えます。 後で参照できるように、パスワードを安全に保存してください。
  • CM_XXXを Configuration Manager (CM) データベースの名前に置き換えます。
EXEC sp_control_dbmasterkey_password
    @db_name = N'CM_XXX',
    @password = N'password',
    @action = N'add';

このコマンドは、DMK パスワードをローカル のサービス マスター キー (SMK) に登録し、フェールオーバー イベントが発生したときに DMK を自動的に開くことをSQL Serverできるようにします。 このプロセスにより、フェールオーバーまたは再起動後に、そのノードで DMK を自動的に復号化できます。

すべてのノードがデータベース マスター キー (DMK) を自動的に開いてデータの暗号化を解除できることを確認するには、「 すべてのノードがデータベース マスター キー (DMK) を自動的に開き、この記事のデータを復号化できることを確認する」セクションを 参照してください。

既存のデータベース マスター キー (DMK) パスワードが不明な場合

既存の DMK パスワードが不明な場合は、既存の DMK を削除し、既知のパスワードを使用して新しい DMK を作成する必要があります。 これらの手順では、この手順を実行する方法について説明します。

有効な DMK を検索する

有効な DMK を持つノードが不明な場合は、次の手順に従って、既存の DMK が開いている場所を確認します。

重要

次のクエリとコマンドでは、

  • passwordを任意の強力なパスワードに置き換えます。 今後の参照のために、パスワードを既知の場所に安全に保存してください。
  • CM_XXXを Configuration Manager (CM) データベースの名前に置き換えます。
  1. プライマリ ノードで次のクエリを実行します。

    SELECT TOP 5 RecoveryAndHardwareCore.DecryptString(RecoveryKey, DEFAULT)
    FROM RecoveryAndHardwareCore_Keys
    ORDER BY LastUpdateTime DESC
    
  2. 結果のクエリで次の手順を実行します。

    • DMK が開いている場合、クエリは有効なキーを持つ行のプレーンテキスト値を返します。 このノードは開始するノードであり、次の手順はスキップできます。
    • DMK が開いていない場合、クエリはすべての行の NULL 値を返します。 現在のノードは、DMK が開いているノードではありません。 次の手順に従って、DMK が開いているノードを見つけます。
  3. クエリがすべての NULL 値を返す場合は、各セカンダリ ノードにフェールオーバーし、RecoveryAndHardwareCore_Keys正常に復号化できるノードが見つかるまで前 の手順を 繰り返します。 このノードは、起動するノードです。

新しいデータベース マスター キー (DMK) を作成する

開いている DMK の適切なノードが特定されたら、次の手順に従います。

  1. 前の手順で特定したノードで、次のクエリを実行して、秘密キーを使用してBitLockerManagement_CERT証明書をエクスポートします。 必ず強力なパスワードを使用してください。

    BACKUP CERTIFICATE BitLockerManagement_CERT
    TO FILE = 'C:\Windows\Temp\BitLockerManagement_CERT'
    WITH PRIVATE KEY
    (
        FILE = 'C:\Windows\Temp\BitLockerManagement_CERT_KEY',
        ENCRYPTION BY PASSWORD = 'password'
    );
    
  2. 既存の DMK をエクスポートするには、次のクエリを実行して、既存のデータベース マスター キー (DMK) をバックアップします。

    BACKUP MASTER KEY
    TO FILE = 'C:\Windows\Temp\DMK'
    ENCRYPTION BY PASSWORD = 'password';
    

    注:

    この手順は省略可能ですが、推奨されます。 バックアップは、安全な既知の場所に保持してください。

  3. 次のクエリを実行して、既存の証明書と DMK を削除します。

    DROP CERTIFICATE BitLockerManagement_CERT;
    DROP MASTER KEY;
    

    この手順では、古いキーを削除します。

  4. 次のクエリを実行して、新しい DMK を作成します。 必ず強力なパスワードを使用してください。

    CREATE MASTER KEY
    ENCRYPTION BY PASSWORD = 'password';
    
  5. 次のクエリを実行して、新しい DMK パスワードをローカル SMK に登録します。

    EXEC sp_control_dbmasterkey_password
        @db_name = N'CM_XXX',
        @password = N'password',
        @action = N'add';
    
  6. 次のクエリを実行して、以前にエクスポートしたBitLockerManagement_CERT証明書をインポートします。

    CREATE CERTIFICATE BitLockerManagement_CERT AUTHORIZATION RecoveryAndHardwareCore
    FROM FILE = 'C:\Windows\Temp\BitLockerManagement_CERT'
    WITH PRIVATE KEY
    (
        FILE = 'C:\Windows\Temp\BitLockerManagement_CERT_KEY',
        DECRYPTION BY PASSWORD = 'password'
    );
    
  7. 次のクエリを実行して、証明書に必要な制御アクセス許可を付与します。

    GRANT CONTROL ON CERTIFICATE::BitLockerManagement_CERT TO RecoveryAndHardwareRead;
    GRANT CONTROL ON CERTIFICATE::BitLockerManagement_CERT TO RecoveryAndHardwareWrite;
    
  8. 次のノードにフェールオーバーします。

  9. 次のクエリを実行して、DMK パスワードをローカル SMK に登録します。 レプリカごとに 1 回実行します。

    EXEC sp_control_dbmasterkey_password
        @db_name = N'CM_XXX',
        @password = N'password',
        @action = N'add';
    
  10. 残りのノードで前の 2 つの手順を実行します。

  11. 元のノードにフェールオーバーします。

  12. すべてのノードがデータベース マスター キー (DMK) を自動的に開き、データの暗号化を解除できることを確認するには、次のセクション「 すべてのノードがデータベース マスター キー (DMK) を自動的に開き、この記事のデータを復号化できることを確認する」セクションを 参照してください。

すべてのノードがデータベース マスター キー (DMK) を自動的に開き、データの暗号化を解除できることを確認します

すべてのノードがデータベース マスター キー (DMK) を自動的に開き、データの暗号化を解除できることを確認するには、

  1. ノードにフェールオーバーします。

  2. 次のクエリを実行します。

    SELECT TOP 5 RecoveryAndHardwareCore.DecryptString(RecoveryKey, DEFAULT)
    FROM RecoveryAndHardwareCore_Keys
    ORDER BY LastUpdateTime DESC
    
  3. クエリが有効なキーを持つ行のプレーンテキスト値を返す場合、ノードはデータベース マスター キー (DMK) を自動的に開き、データの暗号化を解除できます。

  4. 追加ノードごとに前の 3 つの手順を繰り返します。

ヒント

セキュリティを強化するために、強力な DMK パスワードを安全に保存します。 たとえば、Azure Key Vaultや別のセキュリティで保護されたシークレット ストアなどです。 さらに、スクリプトまたは構成ファイルのプレーン テキストで DMK パスワードをハードコーディングしないようにします。