SQL Server 加密階層最頂層為 服務主金鑰 (Service Master Key, SMK),其次為各資料庫的 資料庫主金鑰 (Database Master Key, DMK)。本文完整示範 SMK/DMK 的備份、還原、建立、重新產生、刪除,以及移除 SMK 加密 DMK 以提高安全性。

-- 備份 SMK
BACKUP SERVICE MASTER KEY
TO FILE = 'C:\SqlBackup\SMK.bak'
ENCRYPTION BY PASSWORD = 'MakeItAGoodOne!1AB'; GO
-- 還原 SMK
RESTORE SERVICE MASTER KEY
FROM FILE = 'H:\SqlBackup\SMK.bak'
DECRYPTION BY PASSWORD = 'MakeItAGoodOne!1AB'; GO
若金鑰未實際變更,還原時會提示:「The old and new master keys are identical. No data re-encryption is required.」
-- 建立資料庫與 DMK
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'BookStore')
CREATE DATABASE BookStore; GO
USE BookStore; GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'; GO
-- 重新產生 DMK (可選 FORCE 強制)
ALTER MASTER KEY [FORCE] REGENERATE WITH ENCRYPTION BY PASSWORD = 'password'; GO
-- 刪除 DMK (若仍被其他物件使用會失敗)
DROP MASTER KEY; GO
最佳實務:建立 DMK 後 立即備份,避免遺失導致加密物件無法存取。
USE BookStore; GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MagneticFields!'; GO
BACKUP MASTER KEY TO FILE = 'H:\SqlBackup\BookStore_Master_Key.BAK'
ENCRYPTION BY PASSWORD = '4D280837!!!'; GO
RESTORE MASTER KEY FROM FILE = 'H:\SqlBackup\BookStore_Master_Key.BAK'
DECRYPTION BY PASSWORD = '4D280837!!!'
ENCRYPTION BY PASSWORD = 'MagneticFields!'; GO
預設 DMK 同時受 SMK 與建立時密碼保護。移除 SMK 加密後,擁有 sysadmin 的登入若不知 DMK 密碼,將無法存取加密資料。
-- 移除 SMK 加密
ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY; GO
-- 之後修改 DMK 需先手動開啟
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'MagneticFields!'; GO
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY; GO
CLOSE MASTER KEY; GO
OPEN MASTER KEY)。