針對 SQL Always On,使用加密資料庫中的復原數據中的指示來加密 BitLocker 資訊時,需要執行其他步驟。 其他步驟可確保所有 Always On 節點都能在發生故障轉移事件時,自動開啟資料庫主要密鑰 (DMK) 。 下列步驟可讓您順暢地擷取 BitLocker 金鑰,而不需要手動介入。
資料庫中 BitLocker 復原數據加密時的 SQL Always On 概觀
SQL Server 使用階層式基礎結構來加密數據,並在加密階層中深入說明。
- 月臺主要金鑰 (SMK) - 此金鑰是每個實例金鑰的唯一金鑰,每個 SQL Server Always On 節點且不會復寫。 它用來加密資料庫主要金鑰。
- 資料庫主要金鑰 (DMK) - 此金鑰會儲存在資料庫中並進行複寫。 它用來加密BitLockerManagement_CERT。
- BitLockerManagement_CERT - 此憑證會儲存在資料庫中並進行複寫。 它用來加密一些 BitLocker 相關數據,例如修復金鑰。
SMK 會加密 DMK 密碼。 SMK 是節點特定的。 發生故障轉移事件時,新的主要節點無法解密 DMK 密碼,因為它已使用不同的 SMK 加密。 在每個節點上設定 DMK 密碼可讓節點在故障轉移時解密密碼。
注意事項
BitLockerManagement_CERT會執行數據行的加密。 如果遺失或刪除此憑證,或加密的 DMK 遺失或刪除,則必須重新委付 BitLocker 金鑰並重新加密。
如果已知資料庫主要金鑰 (DMK) 密碼
在載入 Configuration Manager 資料庫之可用性群組中的每個節點上執行下列命令:
重要事項
在下列命令中:
- 以您選擇的強密碼取代
password所有位置。 請務必安全地儲存密碼以供日後參考。 - 將取代
CM_XXX為 Configuration Manager (CM) 資料庫的名稱。
EXEC sp_control_dbmasterkey_password
@db_name = N'CM_XXX',
@password = N'password',
@action = N'add';
此命令會向本機服務主要密鑰 (SMK 註冊 DMK 密碼) 允許 SQL Server 在發生故障轉移事件時自動開啟 DMK。 此程式可確保在故障轉移或重新啟動之後,可以在該節點上自動解密 DMK。
若要確認所有節點都可以自動開啟資料庫主要密鑰 (DMK) 並解密數據,請參閱本文中的 確認所有節點都可以自動開啟資料庫主要密鑰 (DMK) 並解密數據 一節。
如果現有的資料庫主要金鑰 (DMK) 密碼未知
如果現有的 DMK 密碼不明,則必須卸除現有的 DMK,並使用已知密碼建立新的 DMK。 這些步驟記載如何執行此程式。
尋找有效的 DMK
如果不知道哪一個節點具有有效的 DMK,請遵循下列步驟來判斷現有 DMK 的開啟位置:
重要事項
在下列查詢與命令中:
- 以您選擇的強密碼取代
password所有位置。 請務必將密碼安全地儲存在已知位置,以供日後參考。 - 將取代
CM_XXX為 Configuration Manager (CM) 資料庫的名稱。
在主要節點上執行下列查詢:
SELECT TOP 5 RecoveryAndHardwareCore.DecryptString(RecoveryKey, DEFAULT) FROM RecoveryAndHardwareCore_Keys ORDER BY LastUpdateTime DESC在結果查詢中:
- 如果 DMK 已開啟,查詢會針對其中具有有效索引鍵的任何數據列傳回純文本值。 此節點是要啟動的節點,可略過下一個步驟。
- 如果 DMK 未開啟,查詢會傳回所有數據列的 NULL 值。 目前的節點不是 DMK 開啟所在的節點。 請遵循下一個步驟來尋找 DMK 開啟所在的節點。
如果查詢傳回所有NULL值,則故障轉移至每個次要節點,並重複先前的步驟,直到找到可成功解密 的節點RecoveryAndHardwareCore_Keys 為止。 這個節點是要啟動的節點。
建立新的資料庫主要金鑰 (DMK)
識別出具有開啟 DMK 的適當節點之後,請遵循下列步驟:
在先前步驟中識別的節點上,執行下列查詢以匯出BitLockerManagement_CERT憑證及其私鑰。 請務必使用強密碼:
BACKUP CERTIFICATE BitLockerManagement_CERT TO FILE = 'C:\Windows\Temp\BitLockerManagement_CERT' WITH PRIVATE KEY ( FILE = 'C:\Windows\Temp\BitLockerManagement_CERT_KEY', ENCRYPTION BY PASSWORD = 'password' );執行下列查詢以導出現有的 DMK,以備份現有的資料庫主要密鑰 (DMK) :
BACKUP MASTER KEY TO FILE = 'C:\Windows\Temp\DMK' ENCRYPTION BY PASSWORD = 'password';注意事項
此步驟是選擇性的,但建議使用。 請務必將備份保留在安全的已知位置。
執行下列查詢以卸除現有的憑證和 DMK:
DROP CERTIFICATE BitLockerManagement_CERT; DROP MASTER KEY;此步驟會移除舊的金鑰。
執行下列查詢以建立新的 DMK。 請務必使用強密碼:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';執行下列查詢,向本機 SMK 註冊新的 DMK 密碼:
EXEC sp_control_dbmasterkey_password @db_name = N'CM_XXX', @password = N'password', @action = N'add';執行下列查詢以匯入先前導出的BitLockerManagement_CERT憑證:
CREATE CERTIFICATE BitLockerManagement_CERT AUTHORIZATION RecoveryAndHardwareCore FROM FILE = 'C:\Windows\Temp\BitLockerManagement_CERT' WITH PRIVATE KEY ( FILE = 'C:\Windows\Temp\BitLockerManagement_CERT_KEY', DECRYPTION BY PASSWORD = 'password' );執行下列查詢,以授與憑證的必要控制許可權:
GRANT CONTROL ON CERTIFICATE::BitLockerManagement_CERT TO RecoveryAndHardwareRead; GRANT CONTROL ON CERTIFICATE::BitLockerManagement_CERT TO RecoveryAndHardwareWrite;故障轉移至下一個節點。
執行下列查詢,以向本機 SMK 註冊 DMK 密碼。 針對每個複本執行一次:
EXEC sp_control_dbmasterkey_password @db_name = N'CM_XXX', @password = N'password', @action = N'add';在任何剩餘的節點上執行前兩個步驟。
故障轉移至原始節點。
若要確認所有節點都可以自動開啟資料庫主要密鑰 (DMK) 並解密數據,請參閱下一節 確認所有節點都可以自動開啟資料庫主要密鑰 (DMK) 並解密 本文中的數據。
確認所有節點都可以自動開啟資料庫主要密鑰 (DMK) 並解密數據
若要確認所有節點都可以自動開啟資料庫主要金鑰 (DMK) 並解密資料:
故障轉移至節點。
執行下列查詢:
SELECT TOP 5 RecoveryAndHardwareCore.DecryptString(RecoveryKey, DEFAULT) FROM RecoveryAndHardwareCore_Keys ORDER BY LastUpdateTime DESC如果查詢針對其中具有有效索引鍵的任何數據列傳回純文本值,則節點可以自動開啟資料庫主要密鑰 (DMK) ,並可解密數據。
針對每個額外的節點重複上述三個步驟。
提示
為了改善安全性,請安全地儲存強式 DMK 密碼。 例如,在 Azure 金鑰保存庫 或其他安全的秘密存放區中。 此外,請避免在腳本或組態檔中以純文本將 DMK 密碼硬式編碼。