次の方法で共有


Always Encrypted を使用した暗号化データの列への一括読み込み

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

一括コピー操作中にサーバーでメタデータ チェックを実行せずに暗号化されたデータを読み込むには、 ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションを使用してユーザーを作成します。 このオプションは、Always Encrypted を使用できない従来のツールまたはサードパーティの Extract-Transform-Load (ETL) ワークフローで使用することを目的としています。 これにより、ユーザーは、暗号化された列を含むあるテーブル セットから、暗号化された列を含む別のテーブル セット (同じデータベースまたは別のデータベース内) に、暗号化されたデータを安全に移動できます。

暗号化された値の変更を許可するオプション

CREATE USERALTER USER の両方にALLOW_ENCRYPTED_VALUE_MODIFICATIONSオプションがあります。 ON (既定値は OFF) に設定すると、このオプションでは、一括コピー操作でサーバー上の暗号化メタデータ チェックが抑制されます。これにより、ユーザーはデータの暗号化を解除せずに、テーブルまたはデータベース間で暗号化されたデータを一括コピーできます。

データ移行のシナリオ

次の表では、いくつかの移行シナリオに適した推奨設定を示しています。

いくつかの移行シナリオに適した推奨設定を示す表のスクリーンショット。

暗号化されたデータを一括読み込みする

次のプロセスを使用して、暗号化されたデータを読み込みます。

  1. このオプションを、一括コピー操作のターゲットであるデータベース内のユーザーに対して ON するように設定します。 次に例を示します:

     ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;
    
  2. そのユーザーとして接続して、一括コピー アプリケーションまたはツールを実行します。 (アプリケーションで Always Encrypted 対応クライアント ドライバーを使用している場合は、暗号化された列から取得したデータが暗号化されたままになるように、データ ソースの接続文字列に column encryption setting=enabled が含まれていないことを確認します。詳細については、「 Always Encrypted を使用したアプリケーションの開発」を参照してください)。

  3. ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションを OFF に戻します。 次に例を示します:

    ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;
    

データの破損の可能性

このオプションを不適切に使用すると、データが破損する場合があります。 ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションを使用すると、ユーザーは、異なるキーで暗号化されたデータ、誤って暗号化されたデータ、まったく暗号化されていないデータなど、暗号化された列にデータを挿入できます。 ユーザーがターゲット列に対して設定された暗号化スキーム (列暗号化キー、アルゴリズム、暗号化の種類) を使用して正しく暗号化されていないデータを誤ってコピーした場合、データの暗号化を解除できません (データが破損しています)。 このオプションは、データベース内のデータが破損する場合があるため、慎重に使用する必要があります。

次のシナリオでは、データが破損する可能性のあるデータの不適切なインポートについて説明します:

  1. このオプションは、ユーザーに対して ON に設定されます。

  2. このユーザーは、データベースに接続されているアプリケーションを実行します。 アプリケーションは一括 API を使用して、暗号化された列にプレーン テキスト値を挿入します。 アプリケーションには、挿入時にデータを暗号化するために Always Encrypted が有効なクライアント ドライバーが必要です。 ただし、アプリケーションが正しく構成されていないため、Always Encrypted をサポートしていないドライバーが使用されるか、接続文字列に column encryption setting=enabledが含まれません。

  3. アプリケーションはプレーンテキスト値をサーバーに送信します。 暗号化メタデータ チェックがユーザーのサーバーでは無効になっているため、サーバーでは不適切なデータ (適切に暗号化された暗号化テキストではなくプレーンテキスト) を暗号化された列に挿入することができます。

  4. 同じアプリケーションまたは別のアプリケーションが Always Encrypted 対応ドライバーを使用し、接続文字列に column encryption setting=enabled を使用してデータベースに接続し、データを取得します。 アプリケーションは、透過的にデータの暗号化が解除されることを期待します。 しかし、データが不適切な暗号化テキストであるため、ドライバーはデータの暗号化を解除できません。

ベスト プラクティス

長時間実行のワークロードの場合は、このオプションを使用して指定されたユーザー アカウントを使用します。

暗号化されたデータを暗号化解除せずに移動する必要がある短時間の一括コピー アプリケーションまたはツールの場合は、アプリケーションを実行する直前に ON オプションを設定し、操作を実行した直後に OFF に戻します。

新しいアプリケーションを開発する場合は、このオプションを使用しないでください。 代わりに、.NET Framework Data Provider for SQL Server の AllowEncryptedValueModifications オプションなど、1 つのセッションの暗号化メタデータ チェックを抑制するための API を提供するクライアント ドライバーを使用します。「 SqlBulkCopy を使用した暗号化されたデータのコピー」を参照してください。