使用 Always Encrypted 與 DAC 套件設定資料行加密

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

資料層應用程式 (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 資料行主要金鑰或資料行加密金鑰的中繼資料物件。

效能考量

若要執行密碼編譯作業,您用來部署 DACPAC 的工具必須將資料移出資料庫。 此工具會在資料庫中建立具有所需加密設定的新資料表、從原始資料表載入所有資料、執行所要求的密碼編譯作業、將資料上傳至新的資料表,然後交換原始資料表與新的資料表。 執行密碼編譯作業可能需要很長的時間。 在這段期間,資料庫無法寫入交易。

注意

如您使用 SQL Server 2019 (15.x) 且 SQL Server 執行個體是以安全記憶體保護區進行設定,您可在此執行密碼編譯作業,而無須將資料移出資料庫。 請參閱使用具有安全記憶體保護區的 Always Encrypted 就地設定資料行加密。 請注意,就地加密不適用於 DACPAC 部署。

設定 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

如果升級作業觸發資料加密作業,您也需要金鑰存放區權限,才能存取和使用資料行主要金鑰。 如需金鑰存放區權限的相關詳細資訊,請移至建立及儲存 Always Encrypted 的資料行主要金鑰,並尋找與金鑰存放區相關的區段。

後續步驟

另請參閱