星期日, 9月 03, 2023

[SQL] 備份加密 - 還原

上篇筆記紀錄 [SQL] 備份加密 - 備份,該篇根據官方文章 - 備份加密 內還原步驟,來把加密過備份檔案還原至新 instance 上,還原步驟依序為
  1. 在原 instance 上備份憑證
  2. 在新 instance 上的 master DB 上建立 master key
  3. 在新 instance 上匯入憑證
  4. 在新 instance 上還原 DB
加密過備份檔案還原完整 Script
-- Step1:在原 instance 上備份憑證
BACKUP CERTIFICATE AdventureWorksCert 
TO FILE = 'C:\Temp\AdventureWorksCert'
WITH PRIVATE KEY 
	(
		FILE = 'C:\Temp\AdventureWorksKey',
		ENCRYPTION BY PASSWORD = 'P@ssW0rd' -- 指定憑證私鑰檔案的密碼
	)
    
-- Step2: 在新 instance 上的 master DB 上建立 master key   
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd_In_New_Instance';    
    
-- Step3:在新 instance 上匯入憑證
CREATE CERTIFICATE AdventureWorksCert
FROM FILE = 'C:\Temp\AdventureWorksCert'
WITH PRIVATE KEY 
	(
		FILE = 'C:\Temp\AdventureWorksKey',
		DECRYPTION BY PASSWORD = 'P@ssW0rd' -- 使用憑證私鑰檔案的密碼
	) ;
    
-- Step4:在新 instance 上還原 DB
RESTORE DATABASE AdventureWorks2022
FROM DISK = 'C:\Temp\AdventureWorks2022.bak'
WITH REPLACE
    
Step1:在原 instance 上備份憑證

BACKUP CERTIFICATE 除了 ENCRYPTION BY PASSWORD 還有 DECRYPTION BY PASSWORD 參數,該憑證建立時是用 master key 的話,備份憑證時就不用指定該參數

此外備份時該憑證 private key 已經存在,不會直接覆蓋,會有下列錯誤訊息
無法寫入檔案 'C:\Temp\AdventureWorksKey'。請確認您具有寫入權限、檔案路徑有效且該檔案尚未存在。

Step2:在新 instance 上的 master DB 上建立 master key

在新 instance 建立 master key 的密碼,不用一定要跟舊 instance 一樣,已經存在 master key 的話可以省略該步驟

Step3:在新 instance 上匯入憑證

[匯入憑證時指定 DECRYPTION BY PASSWORD 的密碼] 一定要跟 [備份憑證時指定 ENCRYPTION BY PASSWORD 的密碼] 一樣,不一樣會出現下列錯誤訊息
私密金鑰密碼無效。
另外進行匯入憑證前,一定要建立 master key,雖然沒有用上它,要不然會有該錯誤訊息產生
執行此作業之前,請在資料庫中建立主要金鑰或在工作階段中開啟主要金鑰。

Step4:在新 instance 上還原 DB

沒有憑證情況下進行還原,會出現列錯誤訊息
找不到指模為 '0xAD763446520338DC5EC78D027B1201362048AEB6' 的伺服器 憑證。RESTORE DATABASE 正在異常結束。
最後在 備份加密-限制 說明內,有提到兩點還原注意事項
  • SQL Server Express 和 SQL Server Web 不支援備份期間加密。 但是可支援從加密的備份還原到 SQL Server Express 或 SQL Server Web 的執行個體。
  • 舊版 SQL Server 無法讀取加密的備份。

沒有留言:

張貼留言