使用 Azure Key Vault 設定 SQL Server TDE 可延伸金鑰管理
適用於:SQL Server
在本文中,您將安裝及設定適用於 Azure Key Vault 的 SQL Server 連接器。
注意
Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。
從 SQL Server 2022 (16.x) Cumulative Update 12 開始,使用 Azure Key Vault (AKV) 的可延伸金鑰管理可用於 Linux 上的 SQL Server 環境。 請遵循相同的指示,但略過步驟 3 和 4。
必要條件
在開始搭配 SQL Server 執行個體使用 Azure Key Vault 前,請確認已符合下列必要條件:
您必須擁有 Azure 訂用帳戶。
建立 Microsoft Entra 租用戶。
透過檢閱使用 Azure Key Vault (SQL Server) 的可擴充金鑰管理,熟悉 Azure Key Vault 的可擴充金鑰管理 (EKM) 儲存體的原理。
可以修改 SQL Server 電腦上的登錄。
根據正在執行的 SQL Server 版本安裝 Visual Studio C++ 可轉散發套件版本:
SQL Server 版本 Visual Studio C++ 可轉散發套件版本 2008、2008 R2、2012、2014 適用於 Visual Studio 2013 的 Visual C++ 可轉散發套件 2016、2017、2019、2022 適用於 Visual Studio 2015 的 Visual C++ 可轉散發套件 如果您計劃在防火牆後或利用 Proxy 伺服器來使用適用於 Microsoft Azure Key Vault 的 SQL Server 連接器,請熟悉在防火牆後存取 Azure Key Vault。
注意
在 SQL Server 2022 (16.x) CU 14 和更新版本中,Linux 上的 SQL Server 支援使用 Azure Key Vault 的 TDE 可延伸金鑰管理。 本指南中的步驟 3 和 4 不需要 Linux 上的 SQL Server。
步驟 1:設定 Microsoft Entra 服務主體
若要將 SQL Server 執行個體存取權限授與 Azure Key Vault,您需要 Microsoft Entra ID 中的服務主體帳戶。
登入 Azure 入口網站並執行下列任一步驟:
選取 [Microsoft Entra ID] 按鈕。
選取 [更多服務],然後在 [所有服務] 窗格中鍵入 [Microsoft Entra ID]。
透過執行以下操作,使用 Microsoft Entra ID 註冊應用程式。 如需詳細的逐步指示,請參閱 Azure Key Vault 部落格文章 Azure Key Vault – 逐步解說中取得應用程式的身分識別一節。
在 [Microsoft Entra ID] 資源的 [管理] 部分中,選取 [應用程式註冊]。
在應用程式註冊頁面上,選取新增註冊。
在 [註冊應用程式] 窗格中,輸入應用程式的使用者對應名稱,然後選取 [註冊]。
在左側窗格中,選取 [憑證和祕密] > [用戶端密碼] > [新增用戶端密碼]。
在 [新增用戶端密碼] 中輸入描述和適當的到期日,然後選取 [新增]。 您無法選擇超過 24 個月的到期期間。 如需詳細資訊,請參閱新增用戶端密碼。
在 [憑證和祕密] 窗格的 [值] 下方,選取用戶端密碼值旁的 [複製] 按鈕,以便在 SQL Server 中用於建立非對稱金鑰。
在左窗格中選取 [概觀],然後在 [應用程式 (用戶端) 識別碼] 方塊中,複製要用來在 SQL Server 中建立非對稱金鑰的值。
步驟 2:建立金鑰保存庫
選取要用來建立金鑰保存庫的方法。
使用 Azure 入口網站來建立金鑰保存庫
您可使用 Azure 入口網站來建立金鑰保存庫,並在其中新增 Microsoft Entra 主體。
建立資源群組。
您透過 Azure 入口網站所建立所有 Azure 資源都必須包含在可建立用來存放金鑰保存庫的資源群組中。 此範例中的資源名稱為 DocsSampleRG。 請自行選擇資源群組和金鑰保存庫名稱,因為所有金鑰保存庫名稱都是全域唯一的。
在 [建立資源群組] 窗格的 [專案詳細資料] 下方輸入值,然後選取 [檢閱 + 建立]。
在 Azure 入口網站中,搜尋或選取金鑰保存庫服務以建立金鑰保存庫。 選取 建立。
在建立金鑰保存庫窗格中,選取基本索引標籤,輸入索引標籤的適當值。建議也啟用清除保護。
在 [存取組態] 索引標籤上,可以選取 [Azure 角色型存取控制] 或 [保存庫存取原則]。 我們會討論這兩個選項,但建議使用 [Azure 角色型存取控制] 選項。 如需詳細資訊,請參閱存取模型概觀。
您可以將 [網路] 索引標籤保留為預設值,也可以為金鑰保存庫設定網路設定。 如果您使用具有金鑰保存庫的防火牆,除非使用私人端點連線,否則必須啟用 [允許信任的 Microsoft 服務以略過防火牆] 選項。 如需詳細資訊,請參閱設定 Azure Key Vault 防火牆和虛擬網路。
選取 [檢閱 + 建立] 按鈕並建立金鑰保存庫。
Azure 角色型存取控制
建議使用 Azure 角色型存取控制 (RBAC) 將權限指派給金鑰保存庫。 此方法可讓您在更細微的層級將權限指派給使用者、群組和應用程式。 可以在管理平面 (Azure 角色指派) 和資料平面 (金鑰保存庫存取原則) 將權限指派給金鑰保存庫。 如果只能使用存取原則,則可以略過本節並移至保存庫存取原則一節。 如需 Azure Key Vault RBAC 權限的詳細資訊,請參閱 Key Vault 資料平面操作的 Azure 內建角色。
移至您所建立的金鑰保存庫資源,然後選取 [存取控制] (IAM) 設定。
選取 [新增>][新增角色指派]。
EKM 應用程式需要 [金鑰保存庫密碼編譯服務加密使用者] 角色,才能執行包裝和解除包裝操作。 搜尋 [金鑰保存庫密碼編譯服務加密使用者]並選取角色。 選取 [下一步]。
在 [成員] 索引標籤中,選取 [選取成員] 選項,然後搜尋您在步驟 1 中建立的 Microsoft Entra 應用程式。 選取應用程式,然後選擇 [選取] 按鈕。
選取兩次 [檢閱 + 指派],以完成角色指派。
建立金鑰的使用者需要 [金鑰保存庫管理員] 角色。 搜尋 [金鑰保存庫管理員],然後選取角色。 選取 [下一步]。
就像先前的步驟一樣,新增可建立金鑰的成員並指派角色。
保存庫存取原則
注意
如果使用 [Azure 角色型存取控制] 選項,則可以略過本節。 如果要變更權限模型,可以移至金鑰保存庫的 [存取設定] 功能表。 確保您擁有管理金鑰保存庫的正確權限。 如需詳細資訊,請參閱在金鑰保存庫中啟用 Azure RBAC 權限。
從 [存取組態] 索引標籤中,選取 [保存庫存取原則]。 如果使用現有的金鑰保存庫,可以從金鑰保存庫資源中選取 [存取原則] 功能表,然後選取 [建立]。
在 [建立存取原則] 窗格中,從 [金鑰管理操作] 選項中選取 [取得] 和 [列出] 權限。 從 [密碼編譯操作] 選項中選取 [解除包裝金鑰] 和 [包裝金鑰] 權限。 選取下一個
在 [主體] 索引標籤中,選取在步驟 1 中建立的應用程式。
選取 [下一步],然後選取 [建立]。
建立金鑰
在 [金鑰保存庫] 窗格中,選取 [金鑰],然後選取 [產生/匯入] 選項。 這會開啟 [建立金鑰] 窗格。 輸入金鑰保存庫名稱。 選取 [產生] 選項,然後輸入金鑰名稱。 SQL Server 連接器需要金鑰名稱僅使用字元 "a-z"、"A-Z"、"0-9" 和 "-",且長度限制為 26 個字元。
使用金鑰類型 RSA,RSA 金鑰大小為 2048。 EKM 目前僅支援 RSA 金鑰。 根據需要設定啟用日期和到期日,並將 [啟用] 設為 [是]。
最佳作法
若要確保快速修復金鑰,且能夠在 Azure 之外存取資料,建議採用下列最佳做法︰
在本機硬體安全模組 (HSM) 裝置上建立加密金鑰。 請務必使用非對稱的 RSA 2048 或 3072 金鑰,以便獲得 SQL Server 支援。
將加密金鑰匯入至 Azure 金鑰保存庫。 下一節將描述這個程序。
在第一次使用 Azure 金鑰保存庫金鑰之前,請先利用
Backup-AzureKeyVaultKey
PowerShell Cmdlet 備份 Azure 金鑰保存庫金鑰。每當對金鑰進行任何變更時 (例如新增 ACL、新增標籤、新增金鑰屬性),請務必先另行備份 Azure Key Vault 金鑰。
注意
備份金鑰是 Azure Key Vault 金鑰作業,它會傳回可儲存在任何位置的檔案。
在防火牆或 Proxy 伺服器後方使用適用於 Microsoft Azure Key Vault 的 SQL Server 連接器時,如果流量延遲或遭封鎖,可能會影響效能。 熟悉在防火牆後存取 Azure Key Vault,以便確保正確規則已就緒。
選用 - 設定 Azure Key Vault 受控 HSM(硬體安全模組)
使用最新版本的 SQL Server 連接器以及 Azure SQL 時,Azure Key Vault 受控 HSM(硬體安全模組)支援 Azure 虛擬機器 上的 SQL Server 和 SQL Server。 受控 HSM 是一種完全受控、高度可用的單一租用戶 HSM 服務。 受控 HSM 為密碼編譯作業和金鑰儲存提供安全的基礎。 受控 HSM 的設計目的是要符合最嚴格的安全性和合規性需求。
在步驟 2 中,我們已瞭解如何在 Azure Key Vault 中建立金鑰保存庫和金鑰。 您可以選擇性地使用 Azure Key Vault 受控 HSM 來儲存或建立要與 SQL Server 連接器搭配使用的金鑰。 以下為其步驟:
建立 Azure Key Vault 受控 HSM。 這可以使用 Azure 入口網站完成,方法是搜尋 Azure Key Vault 受控 HSM 服務,以及建立新的資源,或使用 Azure CLI、PowerShell 或 ARM 範本。
啟用受控 HSM。 只有在建立受控 HSM命令執行期間指派的指定管理員,才可以啟用 HSM。 若要完成這項操作,可以在 Azure 入口網站 中選取受控 HSM 資源,方法是在資源的概觀功能表中選取下載安全性網域。 然後遵循其中 一個快速入門來啟用受控 HSM。
授與 Microsoft Entra 服務主體存取受控 HSM 的權限。 受控 HSM 系統管理員角色不會授與建立金鑰的許可權。 與 步驟 2 類似,EKM 應用程式需要受控 HSM 密碼編譯使用者或受控 HSM 加密服務加密使用者的角色,才能執行裝合和解除裝合作業。 新增角色指派的主體時,請選擇 [企業應用程式] 類型。 有關更多資訊,請參閱受控 HSM 的本地 RBAC 內建角色。
在 Azure Key Vault 受控 HSM 服務功能表中,於設定底下選取金鑰。 在金鑰視窗中,選取產/匯入/還原備份以建立金鑰或匯入現有的金鑰。
注意
建立認證以存取受控 HSM 時,身分識別為
<name of Managed HSM>.managedhsm.azure.net
,可在 Azure Key Vault 受控 HSM 概觀中找到,作為 Azure 入口網站中的 HSM URI。在 Azure Key Vault 受控 HSM 中設定自動金鑰輪替。 如需詳細資訊,請參閱在 Azure Key Vault 受控 HSM 中配置金鑰自動輪替。
需要 SQL Server Connector 15.0.2000.440 版本或更新版本,才能支援 Azure Key Vault 受控 HSM。
受控 HSM 支援私人端點連線。 如需詳細資訊,請參閱整合受控 HSM 與 Azure Private Link。 在此設定中,必須針對 Azure 金鑰保存庫受控 HSM 網路設定啟用 [Microsoft 信任的服務旁路] 選項。
步驟 3:安裝 SQL Server 連接器
從 Microsoft 下載中心下載 SQL Server 連接器。 下載應該由 SQL Server 電腦的系統管理員來完成。
注意
- SQL Server 連接器 1.0.0.440 版和更舊版本已被取代,在生產環境中已不再受到支援,並且使用 [SQL Server 連接器維護和疑難排解] 頁面中 [SQL Server 連接器升級] 下的指示。
- 從 1.0.3.0 版開始,SQL Server 連接器會相關的錯誤訊息報告至 Windows 事件記錄,以供疑難排解之用。
- 從 1.0.4.0 版開始已支援私人 Azure 雲端,包括世紀互聯營運的 Azure、Azure 德國和 Azure Government。
- 1.0.5.0 版中的憑證指紋演算法有重大變更。 您在升級至 1.0.5.0 之後可能會遇到資料庫還原失敗。 如需詳細資訊,請參閱知識庫文章 447099。
- 從 1.0.5.0 版開始 (時間戳記:2020 年 9 月),SQL Server 連接器支援篩選訊息和網路要求重試邏輯。
- 從更新的 1.0.5.0 版開始 (時間戳記:2020 年 11 月),SQL Server 連接器支援 RSA 2048、RSA 3072、RSA-HSM 2048 及 RSA-HSM 3072 金鑰。
- 從更新的 1.0.5.0 版開始 (時間戳記:2020 年 11 月),可以參考 Azure Key Vault 中的特定金鑰版本。
按照預設,連接器會安裝在 C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault
。 這個位置可以在安裝期間變更。 如果將其變更,請調整下一節中的指令碼。
連接器沒有介面,但如果安裝成功,即會在電腦上安裝 Microsoft.AzureKeyVaultService.EKM.dll
。 此組件是密碼編譯的 EKM 提供者 DLL,需要使用 CREATE CRYPTOGRAPHIC PROVIDER
陳述式向 SQL Server 註冊。
SQL Server 連接器安裝也可讓您選擇性地下載 SQL Server 加密的範例指令碼。
若要檢視 SQL Server Connector 的錯誤碼說明、組態設定或維護工作,請參閱:
步驟 4:新增登錄機碼以支援 EKM 提供者
警告
修改登錄應由確切知道其執行作業的使用者執行。 如果您未正確修改登錄,可能會發生嚴重問題。 為增加保護起見,請先備份登錄,再進行修改。 如果發生問題,您可以還原登錄。
請確定 SQL Server 已安裝且正在執行。
執行 regedit 以開啟登錄編輯程式。
在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
上建立SQL Server Cryptographic Provider
登錄機碼。 完整路徑為HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider
。以滑鼠右鍵按一下
SQL Server Cryptographic Provider
登錄機碼,然後選取 [權限]。向執行 SQL Server 服務的使用者帳戶提供
SQL Server Cryptographic Provider
登錄機碼的 [完全控制] 權限。選取 [套用],然後選取 [確定]。
關閉登錄編輯程式,然後重新啟動 SQL Server 服務。
注意
如果您在容錯移轉叢集實例使用 TDE 與 EKM 或 Azure Key Vault,您必須完成額外步驟,才能將
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider
新增至「叢集登錄檢查點」常式,讓登錄可跨節點同步。 同步處理可協助在容錯移轉及金鑰輪替之後進行資料庫復原。若要將登錄機碼新增至「叢集登錄檢查點」常式,請在 PowerShell 執行下列命令:
Add-ClusterCheckpoint -RegistryCheckpoint "SOFTWARE\Microsoft\SQL Server Cryptographic Provider" -Resourcename "SQL Server"
步驟 5:設定 SQL Server
如需本節中每個動作所需最小權限等級的附註。請參閱 B. 常見問題集。
設定 master
資料庫
執行 sqlcmd 或開啟 SQL Server Management Studio。
執行下列 Transact-SQL 指令碼,將 SQL Server 設定為使用 EKM:
-- Enable advanced options. USE master; GO EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE; GO -- Enable EKM provider EXEC sp_configure 'EKM provider enabled', 1; GO RECONFIGURE;
向 SQL Server 註冊 SQL Server 連接器作為 EKM 提供者。
使用 SQL Server 連接器來建立密碼編譯提供者,它是 Azure Key Vault 的 EKM 提供者。 在此範例中,提供者名稱為
AzureKeyVault_EKM
。CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll'; GO
注意
檔案路徑長度不能超過 256 個字元。
設定 SQL Server 登入的 SQL Server 登入認證,以便使用金鑰保存庫。
必須將認證新增至每個將使用金鑰保存庫中金鑰來執行加密的登入。 這可能包括:
使用金鑰保存庫以設定和管理 SQL Server 加密案例的 SQL Server 系統管理員登入。
可能會啟用 TDE 或其他 SQL Server 加密功能的其他 SQL Server 登入。
認證與登入之間的一對一對應。 也就是說,每個登入都必須具有唯一的認證。
利用下列方式修改此 Transact-SQL 指令碼:
編輯
IDENTITY
引數 (DocsSampleEKMKeyVault
),以指向您的 Azure 金鑰保存庫。- 如果使用的是全域 Azure,請使用 Azure Key Vault 名稱來取代
IDENTITY
引數 (步驟 2:建立金鑰保存庫)。 - 如果使用的是私人 Azure 雲端 (例如 Azure Government、世紀互聯營運的 Microsoft Azure 或 Azure 德國),請將
IDENTITY
引數取代為使用 PowerShell 建立金鑰保存庫和金鑰一節的步驟 3 中所傳回保存庫 URI。 請不要在金鑰保存庫 URI 中包含https://
。
- 如果使用的是全域 Azure,請使用 Azure Key Vault 名稱來取代
將
SECRET
引數的第一部分取代為步驟 1:設定 Microsoft Entra 服務主體中的 Microsoft Entra 用戶端識別碼。 在此範例中,用戶端識別碼為d956f6b9xxxxxxx
。重要
請務必移除應用程式 (用戶端) 識別碼中的連字號。
使用用戶端密碼完成
SECRET
引數的第二個部分 (步驟 1:設定 Microsoft Entra 服務主體)。 在此範例中,用戶端密碼為yrA8X~PldtMCvUZPxxxxxxxx
。SECRET
引數的最終字串將是一長串字母和數字,不含連字號 (用戶端密碼部分除外,以防用戶端密碼包含任何連字號)。USE master; CREATE CREDENTIAL sysadmin_ekm_cred WITH IDENTITY = 'DocsSampleEKMKeyVault', -- for public Azure -- WITH IDENTITY = 'DocsSampleEKMKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'DocsSampleEKMKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'DocsSampleEKMKeyVault.vault.microsoftazure.de', -- for Azure Germany -- WITH IDENTITY = '<name of Managed HSM>.managedhsm.azure.net', -- for Managed HSM (HSM URI in the Azure portal resource) --<----Application (Client) ID ---><--Microsoft Entra app (Client) ID secret--> SECRET = 'd956f6b9xxxxxxxyrA8X~PldtMCvUZPxxxxxxxx' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM; -- Add the credential to the SQL Server administrator's domain login ALTER LOGIN [<domain>\<login>] ADD CREDENTIAL sysadmin_ekm_cred;
如需針對
CREATE CREDENTIAL
引數使用變數及以程式設計方式從用戶端識別碼移除連字號的範例,請參閱CREATE CREDENTIAL(建立認證)。在 SQL Server 執行個體中開啟 Azure Key Vault 金鑰。
無論建立了新的金鑰,或匯入了如步驟 2:建立金鑰保存庫中所述的非對稱金鑰,都需要開啟金鑰。 請在下列 Transact-SQL 指令碼提供金鑰名稱來開啟金鑰。
重要
請務必先完成此步驟的登錄必要條件。
- 請將
EKMSampleASYKey
取代為您想在 SQL Server 使用的金鑰名稱。 - 將
ContosoRSAKey0
取代為 Azure Key Vault 中或受控 HSM的金鑰名稱。 以下是無版本金鑰的範例。
CREATE ASYMMETRIC KEY EKMSampleASYKey FROM PROVIDER [AzureKeyVault_EKM] WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0', CREATION_DISPOSITION = OPEN_EXISTING;
從更新的 SQL Server 連接器 1.0.5.0 版開始,您可以參考 Azure Key Vault 的特定金鑰版本:
CREATE ASYMMETRIC KEY EKMSampleASYKey FROM PROVIDER [AzureKeyVault_EKM] WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0/1a4d3b9b393c4678831ccc60def75379', CREATION_DISPOSITION = OPEN_EXISTING;
在上述範例指令碼中,
1a4d3b9b393c4678831ccc60def75379
代表將使用的金鑰特定版本。 若您使用此指令碼,則是否使用新版本更新金鑰並不重要。 例如,在資料庫作業中會一律採用金鑰版本1a4d3b9b393c4678831ccc60def75379
。- 請將
請利用上個步驟所建立的 SQL Server 非對稱金鑰來建立新登入。
--Create a Login that will associate the asymmetric key to this login CREATE LOGIN TDE_Login FROM ASYMMETRIC KEY EKMSampleASYKey;
從 SQL Server 中的非對稱金鑰來建立新登入。 卸除步驟 5:設定 SQL Server 的認證資訊對應,以便認證可對應至新登入。
--Now drop the credential mapping from the original association ALTER LOGIN [<domain>\<login>] DROP CREDENTIAL sysadmin_ekm_cred;
改變新的登入,並將 EKM 認證對應至新的登入。
--Now add the credential mapping to the new Login ALTER LOGIN TDE_Login ADD CREDENTIAL sysadmin_ekm_cred;
設定要加密的使用者資料庫
建立將使用 Azure Key Vault 金鑰來進行加密的測試資料庫。
--Create a test database that will be encrypted with the Azure Key Vault key CREATE DATABASE TestTDE;
利用
ASYMMETRIC KEY
(EKMSampleASYKey
) 來建立資料庫加密金鑰。USE <DB Name>; --Create an ENCRYPTION KEY using the ASYMMETRIC KEY (EKMSampleASYKey) CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER ASYMMETRIC KEY EKMSampleASYKey;
加密測試資料庫。 設定
ENCRYPTION ON
以便啟用 TDE。--Enable TDE by setting ENCRYPTION ON ALTER DATABASE TestTDE SET ENCRYPTION ON;
登錄詳細資料
在
master
資料庫中執行下列 Transact-SQL 查詢,以顯示使用的非對稱金鑰。SELECT name, algorithm_desc, thumbprint FROM sys.asymmetric_keys;
此陳述式會傳回:
name algorithm_desc thumbprint EKMSampleASYKey RSA_2048 <key thumbprint>
在使用者資料庫 (
TestTDE
) 中,執行下列 Transact-SQL 查詢,以顯示使用的非對稱金鑰。SELECT encryptor_type, encryption_state_desc, encryptor_thumbprint FROM sys.dm_database_encryption_keys WHERE database_id = DB_ID('TestTDE');
此陳述式會傳回:
encryptor_type encryption_state_desc encryptor_thumbprint ASYMMETRIC KEY ENCRYPTED <key thumbprint>
清理
清除測試物件。 刪除在此測試指令碼中建立的所有物件。
-- CLEAN UP USE master; GO ALTER DATABASE [TestTDE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [TestTDE]; GO ALTER LOGIN [TDE_Login] DROP CREDENTIAL [sysadmin_ekm_cred]; DROP LOGIN [TDE_Login]; GO DROP CREDENTIAL [sysadmin_ekm_cred]; GO USE master; GO DROP ASYMMETRIC KEY [EKMSampleASYKey]; DROP CRYPTOGRAPHIC PROVIDER [AzureKeyVault_EKM]; GO
如需範例指令碼,請參閱 SQL Server 透明資料加密和使用 Azure Key Vault 進行可延伸金鑰管理部落格文章 (英文)。
刪除某個金鑰或所有 EKM 金鑰後,不會自動清理
SQL Server Cryptographic Provider
登錄機碼。 必須手動清理。 清理登錄機碼時應非常小心,因為過早清理登錄可能會破壞 EKM 功能。 若要清理登錄機碼,請刪除SQL Server Cryptographic Provider
上的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
登錄機碼。
疑難排解
如果未建立登錄機碼 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider
或未授與必要的權限,下列 DDL 陳述式會失敗:
CREATE ASYMMETRIC KEY EKMSampleASYKey
FROM PROVIDER [AzureKeyVault_EKM]
WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0',
CREATION_DISPOSITION = OPEN_EXISTING;
Msg 33049, Level 16, State 2, Line 65
Key with name 'ContosoRSAKey0' does not exist in the provider or access is denied. Provider error code: 2058. (Provider Error - No explanation is available, consult EKM Provider for details)
即將到期的用戶端密碼
如果認證中包含即將到期的用戶端密碼,可將新密碼指派至登入資訊。
更新在步驟 1:設定 Microsoft Entra 服務主體中所建立的原始密碼。
利用相同的身分識別來變更認證,並利用下列程式碼來變更新密碼。 將
<New Secret>
取代為您的新秘密:ALTER CREDENTIAL sysadmin_ekm_cred WITH IDENTITY = 'DocsSampleEKMKeyVault', SECRET = '<New Secret>';
重新啟動 SQL Server 服務。
注意
如果您在可用性群組 (AG) 使用 EKM,您必須改變認證,並在 AG 的所有節點重新啟動 SQL Server 服務。
以新的 AKV 金鑰或新的 AKV 金鑰版本輪替非對稱密鑰
注意
- 手動輪替 AKV 金鑰時,SQL Server 同時支援 AKV 無版本金鑰或有版本金鑰,而且不需要使用不同的 AKV 金鑰。
- 可以輪替原始 AKV 金鑰,從而建立新版本,以取代在 SQL Server 中建立的先前的金鑰。
- 若要進行手動金鑰輪替,必須建立新的 SQL Server 非對稱金鑰,以參考在 AKV 中輪替的無版本金鑰或有版本金鑰。 針對新的 SQL Server 非對稱金鑰,系統會使用 AKV 中的最高金鑰版本來自動選擇無版本 AKV 金鑰。 針對有版本的金鑰,必須使用語法
WITH PROVIDER_KEY_NAME = <key_name>/<version>
指出 AKV 中的最高版本。 可改變資料庫加密金鑰,以使用新的非對稱金鑰重新加密。 相同的金鑰名稱 (有版本或無版本) 可以搭配 AKV 輪替原則使用。 針對有版本金鑰,必須新增目前的版本。 針對無版本金鑰,請使用相同的金鑰名稱。
SQL Server 沒有機制可自動輪替用於 TDE 的非對稱金鑰。 手動輪換非對稱密鑰的步驟如下。
在初始設定中所使用的認證 (
sysadmin_ekm_cred
) 也可供金鑰輪替重複使用。 或者,為新的非對稱金鑰建立新的認證。CREATE CREDENTIAL <new_credential_name> WITH IDENTITY = <key vault>, SECRET = 'existing/new secret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM;
將認證新增至主體:
ALTER LOGIN [domain\userName]; ADD CREDENTIAL <new_credential_name>;
根據新金鑰來建立新的非對稱金鑰 (輪替金鑰之後)。 新金鑰可以是無版本金鑰 (範例中的
ContosoRSAKey0
) 或有版本金鑰 (ContosoRSAKey0/1a4d3b9b393c4678831ccc60def75379
,其中1a4d3b9b393c4678831ccc60def75379
是 AKV 中已更新金鑰的版本):CREATE ASYMMETRIC KEY <new_ekm_key_name> FROM PROVIDER [AzureKeyVault_EKM] WITH PROVIDER_KEY_NAME = <new_key_from_key_vault>, CREATION_DISPOSITION = OPEN_EXISTING;
從新的非對稱金鑰來建立新登入:
CREATE LOGIN <new_login_name> FROM ASYMMETRIC KEY <new_ekm_key_name>;
從主體中卸除認證:
ALTER LOGIN [domain\username] DROP CREDENTIAL <new_credential_name>;
將 AKV 認證對應至新登入:
ALTER LOGIN <new_login_name>; ADD CREDENTIAL <new_credential_name>;
改變資料庫加密金鑰 (DEK),以使用新的非對稱金鑰重新加密:
USE [databaseName]; GO ALTER DATABASE ENCRYPTION KEY ENCRYPTION BY SERVER ASYMMETRIC KEY <new_ekm_key_name>;
可以驗證資料庫中使用的新的非對稱金鑰和加密金鑰:
SELECT encryptor_type, encryption_state_desc, encryptor_thumbprint FROM sys.dm_database_encryption_keys WHERE database_id = DB_ID('databaseName');
此指紋應該符合路徑
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider\Azure Key Vault\<key_vault_url>\<thumbprint>
底下的登錄機碼,並為您的輪替金鑰提供KeyUri
。
重要
輪換伺服器的邏輯 TDE 保護裝置,即表示切換至可保護資料庫加密金鑰 (DEK) 的新非對稱式金鑰或憑證。 金鑰輪換是一項線上作業,應可在幾秒內完成,因為此作業只會解密和重新 DEK,而不是整個資料庫。
輪換後,請不要刪除先前版本的金鑰。 輪換金鑰後,有些資料仍會使用之前的金鑰加密,例如較舊的資料庫備份、已備份的記錄檔、虛擬記錄檔 (VLF) 和交易記錄檔。 資料庫恢復或資料庫還原可能需要先前的金鑰。