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

SQL Server 2008 透明資料加密 (TDE) 完整實作指南

     編輯:關於SqlServer

SQL Server 2005 在可擴展金鑰管理 (EKM) 及資料庫檔案本身加密方面存在不足。SQL Server 2008 引入透明資料加密 (TDE),使用資料庫加密金鑰 (DEK) 對資料檔案(含 I/O 作業、記憶體中資料)進行即時加解密。DEK 由 master 資料庫中的憑證保護,亦支援 EKM 模組。採用標準 DES 與 AES 演算法,有效防禦伺服器被竊、資料檔案被惡意附加掛載等風險。

TDE 核心架構

  • Database Encryption Key (DEK):對稱金鑰,負責實際資料加解密。
  • Master Database Master Key:保護 DEK 的根金鑰。
  • Certificate:受 Master Key 保護,用於加密 DEK。
  • EKM 支援:可整合硬體安全模組 (HSM) 管理金鑰。

完整 T-SQL 實作腳本(含測試與異機附加驗證)

/* Title: TDE 加密實作
   Environment: Windows Server 2008 Enterprise + SQL Server 2008 Enterprise
   請在非生產環境測試 */
USE [master];
GO

-- 1. 建立 Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'StrongP@ssw0rd!';
GO

-- 2. 建立保護 DEK 的憑證
CREATE CERTIFICATE TDE_Cert WITH SUBJECT = N'TDE Certificate for DEK Protection';
GO

-- 3. 建立測試資料庫
IF DB_ID('TDE_TestDB') IS NOT NULL DROP DATABASE TDE_TestDB;
CREATE DATABASE TDE_TestDB;
GO

USE TDE_TestDB;
GO

-- 4. 建立由憑證保護的 DEK (AES_128)
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE TDE_Cert;
GO
/* 此時會出現警告:請立即備份憑證與私鑰,否則異機還原/附加將失敗 */

-- 5. 備份憑證與私鑰 (關鍵步驟)
USE master;
BACKUP CERTIFICATE TDE_Cert
TO FILE = 'D:\Backup\Certs\TDE_Cert.cer'
WITH PRIVATE KEY (
    FILE = 'D:\Backup\Certs\TDE_Cert.pvk',
    ENCRYPTION BY PASSWORD = 'StrongP@ssw0rd!'
);
GO

-- 6. 備份 Master Key
BACKUP MASTER KEY
TO FILE = 'D:\Backup\Certs\MasterKey.key'
ENCRYPTION BY PASSWORD = 'StrongP@ssw0rd!';
GO

-- 7. 啟用 TDE (建議單用戶模式下執行)
ALTER DATABASE TDE_TestDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE TDE_TestDB SET ENCRYPTION ON;
GO
ALTER DATABASE TDE_TestDB SET MULTI_USER;
GO

-- 8. 驗證加密狀態 (encryption_state = 3 表示已加密)
SELECT DB_NAME(database_id), encryption_state
FROM sys.dm_database_encryption_keys;
/* 注意:啟用 TDE 的實例中,tempdb 也會被自動加密 */

-- 9. 異機附加測試:模擬資料檔案被盜、嘗試附加
-- 來源伺服器分離
USE master;
EXEC sp_detach_db N'TDE_TestDB';
GO
-- 將 .mdf/.ldf 複製到目標伺服器

-- 目標伺服器還原 Master Key
RESTORE MASTER KEY
FROM FILE = 'D:\Backup\Certs\MasterKey.key'
DECRYPTION BY PASSWORD = 'StrongP@ssw0rd!'
ENCRYPTION BY PASSWORD = 'StrongP@ssw0rd!';
GO

-- 目標伺服器建立憑證 (從備份檔案)
CREATE CERTIFICATE TDE_Cert
FROM FILE = 'D:\Backup\Certs\TDE_Cert.cer'
WITH PRIVATE KEY (
    FILE = 'D:\Backup\Certs\TDE_Cert.pvk',
    DECRYPTION BY PASSWORD = 'StrongP@ssw0rd!'
);
GO

-- 目標伺服器附加資料庫 (成功即證明 TDE 保護有效)
CREATE DATABASE TDE_TestDB
ON PRIMARY (FILENAME = 'D:\Data\TDE_TestDB.mdf')
LOG ON (FILENAME = 'D:\Data\TDE_TestDB_log.ldf')
FOR ATTACH;
GO

對其他高可用功能的影響

  • 複寫:透過標記交易記錄同步,BCP 產生的快照檔案不會以 TDE 加密。傳輸通道建議使用 IPsec、SSL/TLS 加密連線。
  • 資料庫鏡像與日誌傳送:傳輸過程中的記錄檔案已加密,無額外配置需求。

關鍵提醒

  1. 憑證與私鑰備份必須妥善保管,遺失將導致資料庫永不可用。
  2. 異機還原/附加時,目標實例必須先還原 Master Key 與憑證。
  3. TDE 加密的是靜態資料檔案,不加密傳輸中資料、備份檔案(備份檔案同樣受 TDE 保護,但可額外啟用備份壓縮/加密)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved