SQL Server インポートおよびエクスポート ウィザードで Always Encrypted を使用して列間でデータを移行する

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

SQL Server インポートおよびエクスポート ウィザードは、ソースから宛先にデータをコピーするためのツールです。 このドキュメントでは、ソースまたは宛先が Always Encrypted で保護された列を含む SQL Server データベースである場合に、SQL Server インポートおよびエクスポート ウィザードを使用する方法について説明します。

移行シナリオ

SQL Server インポートおよびエクスポート ウィザードを使用すると、暗号化された列との間でデータを移行するための次のシナリオを実装できます。

移行時にプレーンテキスト データを暗号化する

ご利用のデータ ソースにプレーンテキスト データが含まれていて、宛先が暗号化された列を含む SQL Server データベースである場合は、SQL Server インポートおよびエクスポート ウィザードを使用して、ソースからプレーンテキスト データを取得し、それを暗号化し、暗号化されたデータ (暗号化テキスト) を宛先データベース内の暗号化された列にコピーすることができます。 この移行シナリオでは、データ ソースを、SQL Server インポートおよびエクスポート ウィザードでサポートされている任意のデータ ストアとすることができます。 たとえば、ファイル、SQL Server データベース、別のデータベース システム内のデータベース ファイルなどです。

SQL Server インポートおよびエクスポート ウィザードでデータを確実に暗号化できるようにするには、宛先データベース接続に対して Always Encrypted を有効にすると共に、宛先データベース列内のデータを保護するキーへのアクセス権を持っている必要があります。 詳細については、「データベース接続に対して Always Encrypted を有効または無効にする」および「移行中にデータを暗号化または暗号化解除するためのアクセス許可」を参照してください。

暗号化されたデータを移行時に暗号化解除する

SQL Server データベース内の暗号化されたデータベース列に格納されているデータを移行する場合は、データの暗号化を解除してから、その暗号化が解除された (プレーンテキスト) データを宛先にコピーするように SQL Server インポートおよびエクスポート ウィザードを構成できます。宛先は、ファイル、SQL Server データベース、または別のデータベース システム内のデータベースなど、SQL Server インポートおよびエクスポート ウィザードでサポートされている任意のデータ ストアとすることができます。

SQL Server インポートおよびエクスポート ウィザードでデータの暗号化の解除を確実に行えるようにするには、ソース データベース接続に対して Always Encrypted を有効にすると共に、宛先データベース列内のデータを保護するキーへのアクセス権を持っている必要があります。 詳細については、「データベース接続に対して Always Encrypted を有効または無効にする」および「移行中にデータを暗号化または暗号化解除するためのアクセス許可」を参照してください。

移行時にデータを再暗号化する

ソース SQL Server データベース内の暗号化された列から、同じまたは別の SQL Server データベース内の暗号化された列にデータをコピーする場合は、ソースからデータを取得した後にデータの暗号化を解除し、そしてそのデータを宛先データベース内の暗号化された列に挿入する前に再暗号化するように、SQL Server インポートおよびエクスポート ウィザードを構成することができます。 ターゲット列のスキーマ (たとえば、列のデータ型、暗号化の種類、列の暗号化キー) がソース列のスキーマと異なる場合は、この手法を使用します。

SQL Server インポートおよびエクスポート ウィザードでデータの暗号化と暗号化の解除を確実に行えるようにするには、ソース データベース接続と宛先データベース接続の両方に対して Always Encrypted を有効にすると共に、ソース データベース列内のデータとターゲット データベース列内のデータの両方を保護するキーへのアクセス権を持っている必要があります。 詳細については、「データベース接続に対して Always Encrypted を有効または無効にする」および「移行中にデータを暗号化または暗号化解除するためのアクセス許可」を参照してください。

移行時にデータを暗号化したままにする

ソース SQL Server データベース内の暗号化された列から、同じまたは別の SQL Server データベース内の暗号化された列にデータをコピーするときに、ターゲット列で、ソース列と厳密に同じスキーマ (データ型、暗号化の種類、列暗号化キーなど) が使用されている場合は、ソース列から暗号化テキストを取得し、その暗号化されたデータ (暗号化テキスト) をターゲット SQL Server データベース内の暗号化された列に挿入するように、SQL Server インポートおよびエクスポート ウィザードを構成することができます。

このシナリオでは、SQL Server をサポートする任意のデータ プロバイダーを使用して、ソースまたは宛先の SQL Server データベースに接続できます。 Always Encrypted をサポートするプロバイダーを使用して宛先データベースに接続する場合は、そのデータベース接続に対して Always Encrypted が無効になっていることを確認する必要があります。 詳細については、「データベース接続に対して Always Encrypted を有効または無効にする」を参照してください。

また、SQL Server インポートおよびエクスポート ウィザードが宛先データベースに接続するために使用するデータベース プリンシパル (ユーザー) が、ALLOW_ENCRYPTED_VALUE_MODIFICATIONS オプションを ON に設定して構成されていることを確認する必要もあります。 このオプションをオンにすると、一括コピー操作時にサーバーに対する暗号化メタデータ チェックが抑制されます。これにより、ウィザードではデータの暗号化を解除せずに暗号化されたデータを宛先データベースに一括挿入することができます。 詳細については、Always Encrypted によって保護された列への暗号化されたデータの一括読み込みに関するページを参照してください。

データベース接続に対して Always Encrypted を有効または無効にする

ご利用の移行シナリオにおいて、SQL Server インポートおよびエクスポート ウィザードを使用してデータの暗号化および/または暗号化の解除を行えるようにすることが求められている場合は、Always Encrypted をサポートするデータ プロバイダーを使用して、ソース SQL Server データベース接続および/または宛先 SQL Server データベース接続を構成する必要があります。 また、ソース データベース接続および/または宛先データベース接続に対して Always Encrypted を有効にする必要もあります。

接続上でデータの暗号化または暗号化の解除をウィザードで行う必要がない場合は、その接続に対して任意のデータ プロバイダーを使用することができます。

SQL Server インポートおよびエクスポート ウィザード内の次のデータ プロバイダーでは、Always Encrypted がサポートされています。

移行中にデータを暗号化または暗号化解除するためのアクセス許可

SQL Server のソース データベースまたは宛先データベースに格納されたデータを暗号化または暗号化解除するには、ソース データベースで VIEW ANY COLUMN MASTER KEY DEFINITION 権限と VIEW ANY COLUMN ENCRYPTION KEY DEFINITION 権限が必要です。 列マスター キーにアクセスして使用するには、キー ストアのアクセス許可も必要です。 キーの管理操作に必要なキー ストアのアクセス許可の詳細については、「Always Encrypted の列マスター キーを作成して保存する」に移動し、キー ストアに関するセクションを見つけてください。

次のステップ

関連項目