為現有加密資料行啟用具有安全記憶體保護區的 Always Encrypted

適用於:SQL Server 2019 (15.x) 及以後版本在 Windows Azure SQL 資料庫上

本文說明如何啟用具備安全記憶體保護區的 Always Encrypted 功能,以及如何為現有的加密資料行啟用記憶體保護區計算。

如果您有使用未啟用記憶體保護區之金鑰加密的現有資料行,您可以將這些資料行改為使用已啟用記憶體保護區的金鑰加密。 這麼做可讓您在對資料行執行查詢時使用安全記憶體保護區域。

您可以透過幾種不同方式,為現有的加密資料行啟用安全區域計算,具體取決於下列情況:

  • 範圍/細微性:您要啟用一小部分資料行的記憶體保護區功能,還是啟用使用指定資料行主要金鑰保護之所有資料行的記憶體保護區功能?
  • 資料大小:包含您要設為啟用記憶體保護區之資料行的資料表大小為何?
  • 您是否也想變更您資料行的加密類型? 請記住,只有隨機化加密才支援較複雜的運算(模式比對、比較運算子)。 如果您的資料行是以決定性加密進行加密,則還需要使用隨機加密重新加密,才能啟用進階運算。

下列各節說明如何為現有資料行啟用記憶體保護區的三種方法。

方法 1:輪替資料行主要金鑰,以已啟用記憶體保護區的資料行主要金鑰取代它

將現有資料行主要金鑰 (未啟用記憶體保護區) 更換成已啟用記憶體保護區的新資料行主要金鑰,會有效地將所有資料行加密金鑰 (與資料行主要金鑰建立關聯) 設為已啟用記憶體保護區。

  • 優點:

    • 不會涉及重新加密資料,因此它通常是最快的方法。 如果資料行包含大量資料、已啟用豐富計算並使用確定性加密,則建議使用這個方法。
    • 可以啟用多個任意大小之資料行的記憶體保護區功能。 以啟用記憶體保護區功能的資料行主要金鑰取代資料行主要金鑰,會使所有與原始資料行主要金鑰相關聯的資料行加密金鑰和所有加密資料行,也都啟用記憶體保護區功能。
  • 缺點:

    • 不支援將加密類型從確定性變更為隨機化。 雖然它支援對使用決定性加密的資料行進行就地加密,但並不支援進階運算。 您需要使用隨機化加密來重新加密資料行。
    • 不允許選擇性地轉換與指定資料行主要金鑰建立關聯的部分資料行。
    • 引進金鑰管理額外負荷。 你需要建立一個新的欄位主鍵,並讓查詢受影響欄位的應用程式使用。

如需有關如何輪替資料行主要金鑰的資訊,請參閱 輪替已啟用記憶體保護區的金鑰。

方法 2:輪換資料行主密鑰,並使用隨機加密以就地方式重新加密資料行

這個方法會涉及執行方法 1 作為第一個步驟,然後重新加密資料行。 資料行一開始使用確定性加密,接著再以隨機加密重新加密,以啟用更豐富的查詢功能。

  • 優點:

    • 就地重新加密資料。 如果您需要為目前使用確定性加密且包含大量資料的加密資料行啟用進階查詢,建議採用此方法。 步驟 1 (資料行主要金鑰輪替) 會使用確定性加密來解除鎖定資料行的就地加密,以允許就地執行步驟 2 (重新加密資料行)。
    • 可以啟用多個任意大小之資料行的記憶體保護區功能。
  • 缺點:

    • 不允許選擇性地轉換與指定資料行主要金鑰建立關聯的部分資料行。
    • 引進金鑰管理額外負荷。 你需要建立一個新的欄位主鍵,並讓查詢受影響欄位的應用程式使用。

如需如何輪替資料行主要金鑰,以及就地重新加密資料行以輪替資料行加密金鑰的資訊,請參閱輪替已啟用記憶體保護區的金鑰。

方法 3:在用戶端使用已啟用記憶體保護區的資料行加密金鑰來重新加密選取的資料行

此方法包括使用支援 enclave 的資料行加密金鑰重新加密資料行,以便透過隨機加密支援進階查詢。 由於目前的資料行加密金鑰未啟用記憶體保護區,因此無法就地重新加密資料行。 請使用 [Always Encrypted 精靈] 或 Set-SqlColumnEncryption Cmdlet 來重新加密資料庫的資料行。

  • 優點:

    • 可讓您選擇性地為單一資料行或一小部分資料行啟用 enclave 功能(就地加密,以及在您使用隨機加密重新加密資料行時的進階查詢)。
    • 只需一個步驟,即可對資料行執行複雜計算。
  • 缺點:

    • 若要重新加密資料,此工具會將資料移出資料庫,這可能需要很長時間且容易發生網路錯誤。
    • 引進金鑰管理額外負荷。 你需要建立一個新的欄位主鍵,並讓查詢受影響欄位的應用程式使用。

如需如何透過用戶端工具輪替資料行加密金鑰的詳細資訊,請參閱使用 SQL Server Management Studio 輪替 Always Encrypted 金鑰和使用 PowerShell 輪替 Always Encrypted 金鑰。