適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
若要在大量複製作業期間載入加密資料而不在伺服器上執行中繼資料檢查,請使用 選項 ALLOW_ENCRYPTED_VALUE_MODIFICATIONS 建立使用者。 此選項旨在供無法使用 Always Encrypted 的舊版工具,或協力廠商的擷取、轉換及載入(ETL)工作流程使用。 這可讓使用者將加密的資料從某一組資料表 (包含加密的資料行) 安全地移至另一組具有加密資料行 (位於相同或不同的資料庫) 的資料表。
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS選項
CREATE USER 和 ALTER USER 都有一個ALLOW_ENCRYPTED_VALUE_MODIFICATIONS選項。 當設定為 ON (預設值為 OFF) 時,此選項會禁止大量複製作業中伺服器上的加密中繼資料檢查,這可讓使用者在資料表或資料庫之間大量複製加密資料,而不需要解密資料。
資料遷移情境
下表顯示適用於數種移轉案例的建議設定。
批量載入加密資料
請使用下列程序來載入加密的資料。
將資料庫中大量複製作業目標的使用者選項設定為
ON。 例如:ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;執行以那個使用者身分連線的批量複製應用程式或工具。 (如果您的應用程式使用已啟用 Always Encrypted 的用戶端驅動程式,請確定資料來源的連接字串不包含
column encryption setting=enabled,以確保從加密資料行擷取的資料保持加密狀態。如需詳細資訊,請參閱 使用 Always Encrypted 開發應用程式。將選項設定
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS回OFF。 例如:ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;
資料損毀的可能性
不當使用這個選項會導致資料損毀。 此 ALLOW_ENCRYPTED_VALUE_MODIFICATIONS 選項可讓使用者將任何資料插入資料庫中的加密資料行,包括使用不同金鑰加密、加密不正確或根本未加密的資料。 如果使用者不小心使用為目標資料行設定的加密配置 (資料行加密金鑰、演算法、加密類型) 複製未正確加密的資料,則無法解密資料 (資料已損毀)。 您必須謹慎使用這個選項,因為它會導致資料庫中的資料損毀。
下列案例示範未正確匯入資料如何導致資料損毀︰
此選項為使用者設定為
ON。使用者執行連接至資料庫的應用程式。 應用程式使用大量 API,將純文字值插入加密的資料行。 應用程式預期已啟用「永遠加密」的用戶端驅動程式會在插入時加密資料。 不過,應用程式設定錯誤,因此它最終會使用不支援 Always Encrypted 的驅動程式,或連接字串不包含
column encryption setting=enabled。應用程式會將純文字值傳送到伺服器。 當伺服器針對使用者停用密碼編譯中繼資料檢查功能時,伺服器會將未正確加密的資料(而是未經正確加密的明文,非正確加密的加密文字)插入加密的資料欄。
相同或另一個應用程式會使用已啟用 Always Encrypted 的驅動程式,並在
column encryption setting=enabled連接字串中連線到資料庫,並擷取資料。 應用程式預期資料會明確地進行解密。 不過,驅動程式無法解密資料,因為資料不是正確的加密文字。
最佳做法
使用此選項指定的使用者帳戶來運行需要長時間持續的工作負載。
對於需要移動加密資料而不解密資料的短期大量複製應用程式或工具,請將選項設定為 ON 在執行應用程式之前立即,並在執行作業後立即將其設定回 OFF。
請勿使用此選項來開發新的應用程式。 相反地,請使用用戶端驅動程式,提供 API 用來抑制單一工作階段的加密中繼資料檢查,例如使用 .NET Framework Data Provider for SQL Server 中的AllowEncryptedValueModifications 選項 - 請參閱 使用 SqlBulkCopy 複製加密資料。