Always Encrypted で保護された機微なデータの移行Migrate Sensitive Data Protected by Always Encrypted

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

一括コピー操作中にサーバーでメタデータ チェックを実行せずに暗号化されたデータを読み込むには、 ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションを指定してユーザーを作成します。To load encrypted data without performing metadata checks on the server during bulk copy operations, create the user with the ALLOW_ENCRYPTED_VALUE_MODIFICATIONS option. このオプションは、 SQL ServerSQL Server より古いバージョンの SQL Server 2016 (13.x)SQL Server 2016 (13.x) から従来のツールで使用するためのものです。Always Encrypted を使用できないサードパーティの ETL (Extract-Transform-Load) ワークフローで使用する場合もあります。This option is intended to be used by legacy tools from versions of SQL ServerSQL Server older than SQL Server 2016 (13.x)SQL Server 2016 (13.x) (such as bcp.exe) or by using third-party Extract-Transform-Load (ETL) work flows that cannot use Always Encrypted. これにより、ユーザーは、暗号化された列を含むあるテーブル セットから、(同じデータベースまたは別のデータベース内の) 暗号化された列を含む別のテーブル セットに暗号化されたデータを安全に移動することができます。This allows a user to securely move encrypted data from one set of tables, containing encrypted columns, to another set of tables with encrypted columns (in the same or a different database).

ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションThe ALLOW_ENCRYPTED_VALUE_MODIFICATIONS Option

CREATE USERALTER USER の両方に ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションがあります。Both CREATE USER and ALTER USER have an ALLOW_ENCRYPTED_VALUE_MODIFICATIONS option. このオプションを ON に設定すると (既定値は OFF)、一括コピー操作でサーバーに対する暗号化メタデータ チェックが抑制されます。これにより、ユーザーはデータの暗号化を解除せずにテーブルまたはデータベース間で暗号化されたデータの一括コピーを行うことができます。When set to ON (the default is OFF), this option suppresses cryptographic metadata checks on the server in bulk copy operations, which enables the user to bulk copy encrypted data between tables or databases, without decrypting the data.

データの移行シナリオData Migration Scenarios

次の表では、いくつかの移行シナリオに適した推奨設定を示しています。The following table shows the recommended settings appropriate for several migration scenarios.

always-encrypted-migrationalways-encrypted-migration

暗号化されたデータの一括読み込みBulk Loading of Encrypted Data

次のプロセスを使用して、暗号化されたデータを読み込みます。Use the following process to load encrypted data.

  1. 一括コピー操作の対象となるデータベース内のユーザーに対して、オプションを ON に設定します。Set the option to ON for the user in the database that is the target for the bulk copy operation. 例:For example:
 ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;  
  1. そのユーザーとして接続して、一括コピー アプリケーションまたはツールを実行します。Run your bulk copy application or tool connecting as that user. (アプリケーションで Always Encrypted が有効なクライアント ドライバーを使用する場合は、暗号化された列から取得されたデータが暗号化された状態のままになるように、データ ソースの接続文字列に column encryption setting=enabled が含まれていないことを確認します。(If your application uses an Always Encrypted enabled client driver, make sure the connection string for the data source does not contain column encryption setting=enabled to ensure the data retrieved from encrypted columns remains encrypted. 詳細については、「 Always Encrypted (クライアント開発)」(Always Encrypted (クライアント開発)) を参照してください。For more information, see Always Encrypted (client development).)

  2. ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションを OFF に戻します。Set the ALLOW_ENCRYPTED_VALUE_MODIFICATIONS option back to OFF. 例:For example:

    ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;  
    

データ破損の可能性Potential for Data Corruption

このオプションを不適切に使用すると、データが破損する場合があります。Improper use of this option can lead to data corruption. ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションでは、ユーザーはデータベース内の暗号化された列に任意のデータを挿入することができます。これには、さまざまなキーで暗号化されたデータ、適切に暗号化されていないか、まったく暗号化されていないデータが含まれます。The ALLOW_ENCRYPTED_VALUE_MODIFICATIONS option allows the user to insert any data into encrypted columns in the database, including data that is encrypted with different keys, incorrectly encrypted, or not encrypted at all. ユーザーが、対象列に設定されている暗号化スキーム (列暗号化キー、アルゴリズム、暗号化の種類) を使用して適切に暗号化されていないデータを誤ってコピーした場合、データの暗号化を解除することはできません (データが破損します)。If the user accidently copies the data that is not correctly encrypted using the encryption scheme (column encryption key, algorithm, encryption type) set up for the target column, you will not be able to decrypt the data (the data will be corrupted). このオプションは、データベース内のデータが破損する場合があるため、慎重に使用する必要があります。This option must be used carefully, as it can lead to corrupting data in the database.

次のシナリオでは、データが破損する可能性のあるデータの不適切なインポートについて説明します。The following scenario demonstrates how improperly importing data could lead to data corruption:

  1. あるユーザーに対して、オプションを ON に設定します。The option is set to ON for a user.

  2. このユーザーは、データベースに接続されているアプリケーションを実行します。The user runs the application that connects to the database. アプリケーションは一括 API を使用して、暗号化された列にプレーン テキスト値を挿入します。The application uses bulk APIs to insert plain text values to encrypted columns. アプリケーションには、挿入時にデータを暗号化するために Always Encrypted が有効なクライアント ドライバーが必要です。The application expects an Always Encrypted-enabled client driver to encrypt the data on insert. しかし、アプリケーションが正しく構成されていないため、結局、Always Encrypted をサポートしていないドライバー、または column encryption setting=enabledが含まれていない接続文字列が使用されます。However, the application is misconfigured, so that either it ends up using a driver that does not support Always Encrypted or the connection string does not contain column encryption setting=enabled.

  3. アプリケーションはプレーンテキスト値をサーバーに送信します。The application sends plaintext values to the server. 暗号化メタデータ チェックがユーザーのサーバーでは無効になっているため、サーバーでは不適切なデータ (適切に暗号化された暗号化テキストではなくプレーンテキスト) を暗号化された列に挿入することができます。As cryptographic metadata checks are disabled in the server for the user, the server lets the incorrect data (plaintext instead of correctly encrypted ciphertext) to be inserted into an encrypted column.

  4. 同じアプリケーションまたは別のアプリケーションは、Always Encrypted が有効なドライバーを使用し、接続文字列で column encryption setting=enabled を指定してデータベースに接続し、データを取得します。The same or another application connects to the database using an Always Encrypted-enabled driver and with column encryption setting=enabled in the connection string, and retrieves the data. アプリケーションは、透過的にデータの暗号化が解除されることを期待します。The application expects the data to be transparently decrypted. しかし、データが不適切な暗号化テキストであるため、ドライバーはデータの暗号化を解除できません。However, the driver fails to decrypt the data because the data is incorrect ciphertext.

ベスト プラクティスBest practice

長時間実行のワークロードの場合は、このオプションを使用して指定されたユーザー アカウントを使用します。Use designated user accounts for long running workloads using this option.

暗号化されたデータの暗号化を解除せずに移動する必要がある、短時間実行の一括コピー アプリケーションまたはツールの場合は、アプリケーションを実行する直前にオプションを ON に設定し、操作の実行直後に OFF に戻します。For short running bulk copy applications or tools that need to move encrypted data without decrypting it, set the option to ON immediately before running the application and set it back to OFF immediately after running the operation.

新しいアプリケーションの開発には、このオプションを使用しないでください。Do not use this option for developing new applications. 代わりに、クライアント ドライバー (ADO 4.6.1 など) を使用してください。このドライバーでは、1 つのセッションの暗号化メタデータ チェックを抑制するための API が提供されます。Instead, use a client driver (such as ADO 4.6.1) that offers an API for suppressing cryptographic metadata checks for a single session.

参照See Also

CREATE USER (Transact-SQL) CREATE USER (Transact-SQL)
ALTER USER (Transact-SQL) ALTER USER (Transact-SQL)
Always Encrypted (データベース エンジン) Always Encrypted (Database Engine)
Always Encrypted ウイザード Always Encrypted Wizard
Always Encrypted (クライアント開発)Always Encrypted (client development)