首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2008

SQL Server 2008 主金鑰完整管理:服務主金鑰與資料庫主金鑰備份、還原、重新產生、移除服務加密

     編輯:SQL Server 2008

前言

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

加密階層架構圖

一、服務主金鑰 (SMK) 備份與還原

-- 備份 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) 建立、重新產生、刪除

-- 建立資料庫與 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 後 立即備份,避免遺失導致加密物件無法存取。

三、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 加密 (提高安全性)

預設 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

小結

  1. SMK 由 SQL Server 服務帳號自動建立,備份/還原需謹慎操作。
  2. DMK 為資料庫層級保護憑證、非對稱/對稱金鑰的核心,**建立即備份** 是鐵律。
  3. 移除 SMK 加密可防止高權限帳號繞過密碼存取加密物件,但增加操作複雜度 (需 OPEN MASTER KEY)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved