資料層應用程式 (DAC) 套件 (也稱為 DACPAC) 是 SQL Server 資料庫部署的可移植單位,其定義所有 SQL Server 物件,包括資料表及資料表內的資料行。 當您將 DACPAC 發佈至資料庫時 (當您使用 DACPAC 升級資料庫時),目標資料庫的結構描述會更新以符合 DACPAC 中結構描述。 您可以使用 SQL Server Management Studio 中的 [升級資料層應用程式精靈]、PowerShell 或 sqlpackage 來發佈 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 封裝觸發就地加密,使用者需要指定 EnclaveAttestationProtocol 和 EnclaveAttestationUrl 屬性。
設定具有安全記憶體保護區的 Always Encrypted 時發佈 DAC 封裝的權限
如果在 DACPAC 和/或目標資料庫中已設定具有安全記憶體保護區的 Always Encrypted,則發佈 DAC 封裝時,您可能需要下列權限中的部分或全部,具體視 DACPAC 中的結構描述與目標資料庫結構描述之間的差異而定。
變更任何COLUMN MASTER KEY、變更任何COLUMN ENCRYPTION KEY、VIEW任何COLUMN MASTER KEY定義、VIEW任何COLUMN ENCRYPTION KEY定義
如果升級作業觸發資料加密作業,您也需要金鑰存放區權限,才能存取和使用資料行主要金鑰。 如需有關金鑰存放區權限的詳細資訊,請參閱 佈建已啟用記憶體保護區的金鑰,並找出與您的金鑰存放區相關的章節。