使用 DAC 封裝就地設定資料行加密

適用於:SQL ServerAzure SQL Database

資料層應用程式 (DAC) 套件 (也稱為 DACPAC) 是 SQL Server 資料庫部署的可移植單位,其定義所有 SQL Server 物件,包括資料表及資料表內的資料行。 當您將 DACPAC 發佈至資料庫時 (當您使用 DACPAC 升級資料庫時),目標資料庫的結構描述會更新以符合 DACPAC 中結構描述。 您可以使用 SQL Server Management Studio 中的 [升級資料層應用程式精靈]PowerShellsqlpackage 來發佈 DACPAC。

本文說明當 DACPAC 或/和目標資料庫包含以 Always Encrypted 所保護的資料行時,升級資料庫的特殊考量。 如果 DACPAC 中資料行與目標資料庫中現有資料行的加密配置不同,則發佈 DACPAC 會導致加密、解密或重新加密儲存在資料行中的資料。 如需詳細資訊,請參閱下表。

條件 動作
資料行已在 DACPAC 中加密,但未在資料庫中加密。 將會加密資料行中的資料。
資料行未在 DACPAC 中加密,但在資料庫中加密。 將會解密資料行中的資料 (將會移除資料行的加密)。
資料行已在 DACPAC 和資料庫中進行加密,但是 DACPAC 中的資料行會使用與資料庫中對應資料行不同的加密類型和/或不同的資料行加密金鑰。 將會解密資料行中的資料,然後重新加密以符合 DACPAC 中的加密組態。

部署 DAC 套件也可能會導致建立或移除 Always Encrypted 資料行主要金鑰或資料行加密金鑰的中繼資料物件。

注意

如您使用 SQL Server 2019 (15.x) 或更新版本或者 Azure SQL 資料庫,且 SQL Server 執行個體是以安全記憶體保護區進行設定,您可在此執行密碼編譯作業,而無須將資料移出資料庫。 請參閱使用具有安全記憶體保護區的 Always Encrypted 就地設定資料行加密。 若要使用 DAC 封裝觸發就地加密,使用者需要指定 EnclaveAttestationProtocolEnclaveAttestationUrl 屬性。

設定具有安全記憶體保護區的 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

如果升級作業觸發資料加密作業,您也需要金鑰存放區權限,才能存取和使用資料行主要金鑰。 如需有關金鑰存放區權限的詳細資訊,請移至佈建已啟用記憶體保護區的金鑰,並尋找與金鑰存放區相關的區段。

下一步

另請參閱