共用方式為


使用 [Always Encrypted 精靈] 設定資料行加密

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控實例

Always Encrypted 精靈是功能強大的工具,可讓您為選取的資料庫數據行設定所需的 Always Encrypted 組態。 根據目前設定和所需目標設定,精靈可以加密資料行、將其解密 (移除加密) 或重新加密 (例如,使用新的資料行加密金鑰,或與針對資料行所設定目前類型不同的加密類型)。 在精靈的單一執行中,可以設定多個資料行。

精靈可讓您使用現有資料行加密金鑰來加密資料行,或您可以選擇產生新的資料行加密金鑰,或同時產生新資料行加密金鑰和新資料行主要金鑰。

使用安全記憶體保護區設定資料庫時,您可以就地執行密碼編譯作業,而無須將資料移出資料庫。 精靈會移除所有相依性,防止需要加密的資料行出現結構描述變更。 它會使用資料庫引擎內的記憶體保護區,為每個資料行發出就地加密命令。 加密完成後,精靈會重新建立相依性。 如需 Always Encrypted 及安全區域的詳細資訊,請參閱 安全區域的 Always Encrypted

當您的資料庫未使用安全記憶體保護區進行設定時,精靈會讓您有機會啟用安全記憶體保護區。 如果您選擇不啟用安全記憶體保護區,或未使用已啟用記憶體保護區的密鑰*,精靈的運作方式是將數據移出資料庫,並在 SQL Server Management Studio (SSMS) 程式中執行密碼編譯作業。 精靈會在資料庫中建立具有所需加密設定的新資料表、從原始資料表載入所有資料、執行所要求的密碼編譯作業、將資料上傳至新資料表,然後交換原始資料表與新資料表。

提示

在環境中使用具有安全記憶體保護區的 Always Encrypted 就地加密,可能會大幅縮短密碼編譯作業的時間和可靠性。

注意

執行密碼編譯作業可能需要很長的時間。 在此期間,您的資料庫無法寫入交易。 PowerShell 是在較大資料表上進行密碼編譯作業時的建議工具。 請參閱 使用 Always Encrypted 搭配 PowerShell 設定數據行加密使用 PowerShell 就地設定數據行加密

權限

要使用精靈執行加密作業,您必須擁有 VIEW ANY COLUMN MASTER KEY DEFINITIONVIEW ANY COLUMN ENCRYPTION KEY DEFINITION 權限。 您也需要金鑰存放區許可權,才能建立、存取和使用數據行主要密鑰。 如需金鑰存放區許可權的詳細資訊,請移至 建立並儲存 Always Encrypted 的數據行主要金鑰 ,或尋找與密鑰存放區相關的區段。

開啟 [Always Encrypted 精靈]

您可以在三個不同層級啟動精靈:

  • 資料庫層級 - 若您想要加密位於不同資料表中的多個資料行。
  • 資料表層級 - 若您想要加密位於相同資料表中的多個資料行。
  • 資料行層級 - 若您想要加密單一特定資料行。
  1. 使用 SQL Server Management Studio 的物件總管元件連線到 SQL Server。

  2. 加密:

    1. 資料庫中位於不同資料表內的多個資料行:請以滑鼠右鍵按一下您的資料庫、指向 [工作],然後選取 [加密資料行]。
    2. 位於相同資料表中的多個資料行:請巡覽至資料表、以滑鼠右鍵按一下資料表,然後選取 [加密資料行]。
    3. 個別資料行:請巡覽至資料行、以滑鼠右鍵按一下資料行,然後選取 [加密資料行]。

數據行選取頁面

在此頁面中,您可以選取您想要加密、重新加密或解密的資料行,且您可以為所選取的資料行定義目標加密設定。

若要加密純文字資料行 (並未加密的資料行),請為資料行選取加密類型 ([決定性] 或 [隨機]) 和加密金鑰。

若要為已加密的資料行變更加密類型或輪替 (變更) 資料行加密金鑰,請選取所需的加密類型和金鑰。

如果您想要精靈使用新的資料行加密金鑰來加密或重新加密一或多個資料行,請挑選名稱中包含 (New) 的金鑰。 精靈將會產生金鑰。

若要解密目前已加密的資料行,請針對加密類型選取 [純文字]。

注意

如果您想使用原地加密,而且正在使用現有的金鑰,請確保您選擇啟用了記憶體保護區的金鑰,這些金鑰會被標示為 已啟用記憶體保護區

注意

精靈不支持時態表和記憶體內部數據表的密碼編譯作業。 您可以使用 Transact-SQL 建立空白的時態性或記憶體內部資料表,並使用您的應用程式插入資料。

主要金鑰組態頁面

若您已在上一個頁面為任何資料行選取自動產生的資料行加密金鑰,在此頁面中您需要選取現有的資料行主要金鑰,或設定將加密資料行加密金鑰的新資料行主要金鑰。

設定新的資料行主要金鑰時,您可以在 Windows 憑證存放區或 Azure Key Vault 中挑選現有金鑰,並讓精靈只為資料庫中的金鑰建立中繼資料物件,或選擇同時產生金鑰及描述資料庫中金鑰的中繼資料物件。

若要使用就地加密,請確定您為新的資料行主要金鑰選取 [允許記憶體保護區運算]。 僅在資料庫已設定安全記憶體保護區時,才允許選取此核取方塊。

如需在 Windows 證書存儲、Azure Key Vault 或其他金鑰存放區中建立及儲存數據行主要金鑰的詳細資訊,請參閱 建立及儲存 Always Encrypted 的數據行主要密鑰 ,或 使用安全記憶體保護區管理 Always Encrypted 的密鑰

提示

精靈只允許您在 Windows 憑證存放區和 Azure Key Vault 中瀏覽和建立金鑰。 它也會自動產生新索引鍵和描述索引鍵的資料庫元數據物件的名稱。 若您需要深入控制您金鑰的佈建方式 (以及針對包含您資料行主要金鑰的金鑰存放區擁有更多選擇),您可以先使用 [新增資料行主要金鑰] 和 [新增資料行加密金鑰] 對話方塊來建立金鑰,然後執行精靈並挑選您已建立的金鑰。 請參閱 使用 [新增欄主金鑰] 對話框佈建欄主金鑰佈建啟用 enclave 的金鑰 ,以及 使用 [新增欄加密金鑰] 對話框佈建欄加密金鑰

就地加密設定頁面

如果您已在資料庫中設定安全記憶體保護區,且使用的是已啟用記憶體保護區的金鑰,則可以在此頁面上指定就地加密所需的記憶體保護區證明參數。 如果您不想使用就地加密,請取消選取 [針對適合的資料行使用就地加密] 以繼續進行用戶端加密。 建議您將此核取方塊保持啟用狀態,以便精靈可以使用就地加密。

如需關於 enclave 證明的詳細資訊,請參閱 使用 Azure 證明設定 Always Encrypted 的證明

加密後

清除存取該數據表的所有批次和預存程式的快取計畫,以刷新參數加密資訊。

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

注意

如果您未從快取中移除受影響查詢的計劃,加密之後的第一次執行查詢可能會失敗。

請小心使用 ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHEDBCC FREEPROCCACHE 來清除計劃快取,因為它可能會導致暫時查詢效能降低。 若要將清除快取的負面影響降到最低,您可以選擇性地只移除受影響查詢的計劃。

呼叫 sp_refresh_parameter_encryption 以更新每個模塊參數的元資料(預存程式、函數、檢視、觸發程式),這些參數會保存在 sys.parameters 中,而且可能已透過加密數據行來失效。