適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
一括コピー操作中にサーバーでメタデータ チェックを実行せずに暗号化されたデータを読み込むには、 ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションを使用してユーザーを作成します。 このオプションは、Always Encrypted を使用できない従来のツールまたはサードパーティの Extract-Transform-Load (ETL) ワークフローで使用することを目的としています。 これにより、ユーザーは、暗号化された列を含むあるテーブル セットから、暗号化された列を含む別のテーブル セット (同じデータベースまたは別のデータベース内) に、暗号化されたデータを安全に移動できます。
暗号化された値の変更を許可するオプション
CREATE USER と ALTER USER の両方にALLOW_ENCRYPTED_VALUE_MODIFICATIONSオプションがあります。
ON (既定値は OFF) に設定すると、このオプションでは、一括コピー操作でサーバー上の暗号化メタデータ チェックが抑制されます。これにより、ユーザーはデータの暗号化を解除せずに、テーブルまたはデータベース間で暗号化されたデータを一括コピーできます。
データ移行のシナリオ
次の表では、いくつかの移行シナリオに適した推奨設定を示しています。
暗号化されたデータを一括読み込みする
次のプロセスを使用して、暗号化されたデータを読み込みます。
このオプションを、一括コピー操作のターゲットであるデータベース内のユーザーに対して
ONするように設定します。 次に例を示します:ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;そのユーザーとして接続して、一括コピー アプリケーションまたはツールを実行します。 (アプリケーションで Always Encrypted 対応クライアント ドライバーを使用している場合は、暗号化された列から取得したデータが暗号化されたままになるように、データ ソースの接続文字列に
column encryption setting=enabledが含まれていないことを確認します。詳細については、「 Always Encrypted を使用したアプリケーションの開発」を参照してください)。ALLOW_ENCRYPTED_VALUE_MODIFICATIONSオプションをOFFに戻します。 次に例を示します:ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;
データの破損の可能性
このオプションを不適切に使用すると、データが破損する場合があります。
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションを使用すると、ユーザーは、異なるキーで暗号化されたデータ、誤って暗号化されたデータ、まったく暗号化されていないデータなど、暗号化された列にデータを挿入できます。 ユーザーがターゲット列に対して設定された暗号化スキーム (列暗号化キー、アルゴリズム、暗号化の種類) を使用して正しく暗号化されていないデータを誤ってコピーした場合、データの暗号化を解除できません (データが破損しています)。 このオプションは、データベース内のデータが破損する場合があるため、慎重に使用する必要があります。
次のシナリオでは、データが破損する可能性のあるデータの不適切なインポートについて説明します:
このオプションは、ユーザーに対して
ONに設定されます。このユーザーは、データベースに接続されているアプリケーションを実行します。 アプリケーションは一括 API を使用して、暗号化された列にプレーン テキスト値を挿入します。 アプリケーションには、挿入時にデータを暗号化するために Always Encrypted が有効なクライアント ドライバーが必要です。 ただし、アプリケーションが正しく構成されていないため、Always Encrypted をサポートしていないドライバーが使用されるか、接続文字列に
column encryption setting=enabledが含まれません。アプリケーションはプレーンテキスト値をサーバーに送信します。 暗号化メタデータ チェックがユーザーのサーバーでは無効になっているため、サーバーでは不適切なデータ (適切に暗号化された暗号化テキストではなくプレーンテキスト) を暗号化された列に挿入することができます。
同じアプリケーションまたは別のアプリケーションが Always Encrypted 対応ドライバーを使用し、接続文字列に
column encryption setting=enabledを使用してデータベースに接続し、データを取得します。 アプリケーションは、透過的にデータの暗号化が解除されることを期待します。 しかし、データが不適切な暗号化テキストであるため、ドライバーはデータの暗号化を解除できません。
ベスト プラクティス
長時間実行のワークロードの場合は、このオプションを使用して指定されたユーザー アカウントを使用します。
暗号化されたデータを暗号化解除せずに移動する必要がある短時間の一括コピー アプリケーションまたはツールの場合は、アプリケーションを実行する直前に ON オプションを設定し、操作を実行した直後に OFF に戻します。
新しいアプリケーションを開発する場合は、このオプションを使用しないでください。 代わりに、.NET Framework Data Provider for SQL Server の AllowEncryptedValueModifications オプションなど、1 つのセッションの暗号化メタデータ チェックを抑制するための API を提供するクライアント ドライバーを使用します。「 SqlBulkCopy を使用した暗号化されたデータのコピー」を参照してください。