DAC パッケージを使って列の暗号化をインプレースで構成する

適用対象:SQL ServerAzure SQL Database

データ層アプリケーション (DAC) パッケージ (DACPAC とも呼ばれます) は、テーブル内のテーブルや列を含むすべての SQL Server オブジェクトを定義する SQL Server データベースのデプロイの移植可能な単位です。 DACPAC をデータベースに発行する場合 (DACPAC を使用してデータベースをアップグレードする場合)、ターゲット データベースのスキーマは、DACPAC のスキーマに一致するように更新されます。 SQL Server Management Studio、PowerShell、または sqlpackageデータ層アプリケーションのアップグレード ウィザードを使用して、DACPAC を発行できます。

この記事では、DACPAC またはターゲット データベースに Always Encrypted で保護された列が含まれる場合に、データベースをアップグレードするための特別な考慮事項について説明します。 DACPAC 内の列の暗号化スキームが、ターゲット データベースの既存の列の暗号化スキームと異なる場合、DACPAC を発行すると、列に格納されているデータの暗号化、暗号化解除、または再暗号化が行われます。 詳細については、次の表を参照してください。

Condition アクション
列は、DACPAC では暗号化され、データベースでは暗号化されていません。 列のデータは暗号化されます。
列は、DACPAC では暗号化されておらず、データベースでは暗号化されています。 列のデータは暗号化解除されます (列の暗号化は解除されます)。
DACPAC とデータベースの両方で列は暗号化されていますが、DACPAC の列で使用される暗号化の種類および/または列暗号化キーは、データベースの対応する列の場合と異なっています。 列のデータは暗号化解除され、DACPAC の暗号化の構成に一致するように再び暗号化されます。

また、DAC パッケージをデプロイすると、Always Encrypted の列マスター キーまたは列暗号化キーのメタデータ オブジェクトが作成または削除されることがあります。

注意

SQL Server 2019 (15.x) 以降または Azure SQL Database を使用しており、SQL Server インスタンスまたはデータベースが安全なエンクレーブで構成されている場合は、データベースからデータを移動せずに、暗号化操作をインプレースで実行できます。 「セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用して列の暗号化をインプレースで構成する」を参照してください。 DAC パッケージを使用してインプレース暗号化をトリガーするには、ユーザーが EnclaveAttestationProtocol プロパティと EnclaveAttestationUrl プロパティを指定する必要があります。

セキュリティで保護されたエンクレーブを使用した Always Encrypted が設定されている場合に DAC パッケージを公開するためのアクセス許可

DACPAC またはターゲット データベースでセキュリティで保護されたエンクレーブを備えた Always Encrypted がセットアップされている場合に DAC パッケージを発行するには、DACPAC 内のスキーマとターゲット データベースのスキーマとの違いに応じて、次に示す権限の一部またはすべてが必要になる場合があります。

ALTER ANY COLUMN MASTER KEYALTER ANY COLUMN ENCRYPTION KEYVIEW ANY COLUMN MASTER KEY DEFINITIONVIEW ANY COLUMN ENCRYPTION KEY DEFINITION

アップグレード操作によってデータ暗号化操作がトリガーされる場合は、列マスタ ーキーにアクセスして使用するためのキー ストアのアクセス許可も必要です。 キー ストアのアクセス許可の詳細については、「エンクレーブ対応キーのプロビジョニング」に移動し、キー ストアに関連するセクションを見つけてください。

次のステップ

関連項目