既存の暗号化された列に対してセキュリティで保護されたエンクレーブが設定された Always Encrypted を有効にする
適用対象: SQL Server 2019 (15.x) 以降 - Windows のみ Azure SQL データベース
この記事では、セキュリティで保護されたエンクレーブが設定された Always Encrypted の機能を有効にし、既存の暗号化された列に対してエンクレーブ計算を有効にする方法を説明します。
エンクレーブ対応ではないキーで暗号化された既存の列がある場合は、エンクレーブ対応のキーを使用して列を暗号化することができます。 そうすることで、列に対するクエリにおいてセキュリティで保護されたエンクレーブを使用できるようになります。
以下に応じて、いくつかの方法で、既存の暗号化された列に対してエンクレーブ計算を有効にすることができます。
- スコープ/粒度: エンクレーブ機能を有効にする対象が特定の列マスター キーで保護されている列の一部かすべての列か。
- データ サイズ: エンクレーブ対応にする列を含むテーブルのサイズ。
- 列の暗号化の種類も変更するか。 高度な計算 (パターン マッチング、比較操作) をサポートしているのは、ランダム化された暗号化のみである点に注意してください。 決定論的な暗号化を使用して列が暗号化されている場合は、高度な計算を使用できるようにするには、ランダム化された暗号化を使用して列を再暗号化する必要もあります。
以下のセクションでは、既存の列のエンクレーブを有効にする 3 つの方法について説明します。
メソッド 1: 列マスター キーをローテーションして、エンクレーブ対応の列暗号化キーに置き換える
既存の列マスター キー (エンクレーブ対応ではないもの) を、エンクレーブ対応の新しい列マスター キーに置き換えると、(列マスター キーに関連付けられている) すべての列暗号化キーも実質的にエンクレーブ対応になります。
長所:
- データを再暗号化する必要がないため、通常は最も速い方法です。 これは、大量のデータが格納されていて、高度な計算が既に有効になっており、決定論的な暗号化が使用されている列に対して、推奨される方法です。
- 多数の列に対してエンクレーブ機能を有効にすることができます。 列マスター キーを、エンクレーブ対応の列マスター キーで置き換えると、すべての列暗号化キーと、元の列マスター キーに関連付けられているすべての暗号化された列が、エンクレーブ対応になります。
短所:
- 暗号化の種類を決定論的からランダム化に変更することはできません。 決定論的な暗号化を使用して暗号化された列のインプレース暗号化は有効になりますが、高度な計算は有効になりません。 ランダム化された暗号化を使用して、列を再暗号化する必要があります。
- 特定の列マスター キーに関連付けられた列の一部を選択して変換することはできません。
- キー管理のオーバーヘッドが発生します。 新しい列マスター キーを作成し、影響を受けた列のクエリを実行するアプリケーションで使用できるようにする必要があります。
列マスター キーのローテーション方法について詳しくは、「エンクレーブ対応キーをローテーションする」をご覧ください。
メソッド 2: 列マスター キーをローテーションし、ランダム化された暗号化を使用してインプレースで列を再暗号化する
この方法では、最初のステップとして方法 1 を実行した後、列を再暗号化します。 最初は決定論的暗号化が使用されていた列を、ランダム化された暗号化を使用して再暗号化し、高度なクエリを有効にします。
長所:
- インプレースでデータが再暗号化されます。 現在は決定論的暗号化が使用されていて、大量のデータが格納されている暗号化された列に対し、高度なクエリを有効にする必要がある場合に、推奨される方法です。 ステップ 1 (列マスター キーのローテーション) で決定論的暗号化を使用している列のインプレース暗号化を有効にすることにより、ステップ 2 (列の再暗号化) をインプレースで実行できます。
- 多数の列に対してエンクレーブ機能を有効にすることができます。
短所:
- 特定の列マスター キーに関連付けられた列の一部を選択して変換することはできません。
- キー管理のオーバーヘッドが発生します。 新しい列マスター キーを作成し、影響を受けた列のクエリを実行するアプリケーションで使用できるようにする必要があります。
列マスター キーをローテーションし、列をインプレースで再暗号化して列暗号化キーをローテーションする方法については、「エンクレーブ対応キーをローテーションする」をご覧ください。
メソッド 3: クライアント側でエンクレーブ対応の列暗号化キーを使用して、選択した列を再暗号化する
この方法では、エンクレーブ対応の列暗号化キーを使用して列を再暗号化し、ランダム化された暗号化での高度なクエリを有効にします。 現在の列暗号化キーはエンクレーブ対応ではないため、列をインプレースで再暗号化することはできません。 データベースの列を再暗号化するには、Always Encrypted ウィザードまたは Set-SqlColumnEncryption コマンドレットを使用します。
長所:
- 1 つの列または列の小さいサブセットに対して、エンクレーブ機能を選択的に有効にすることができます (インプレース暗号化と高度なクエリ、ランダム化された暗号化を使用して列を再暗号化する場合)。
- これにより、1 つのステップで列の高度な計算を有効にできます。
短所:
- データを再暗号化するため、ツールによってデータがデータベースの外部に移動されます。この処理には時間がかかることがあり、ネットワーク エラーが発生しやすくなります。
- キー管理のオーバーヘッドが発生します。 新しい列マスター キーを作成し、影響を受けた列のクエリを実行するアプリケーションで使用できるようにする必要があります。
クライアント側ツールを使用して列の暗号化をローテーションする方法の詳細については、「SQL Server Management Studio を使用して Always Encrypted キーを交換する」および「PowerShell を使用して Always Encrypted キーをローテーションする」をご覧ください。