前言
資料庫檔案外洩的成本往往不在攻擊當下,而在事後。SQL Server 的透明資料加密(Transparent Data Encryption,TDE)能在資料寫入磁碟時自動加密、讀取時自動解密,對應用程式完全透明,不需改一行程式碼。本文從建立主金鑰到啟用加密逐步實作,並說明實務上需要注意的地方。
TDE運作原理
TDE 保護的是磁碟上的靜態資料,也就是 .mdf、.ldf 等資料庫檔案本身。寫入磁碟時加密、從磁碟讀取時解密,整個流程發生在資料庫引擎層,應用程式完全不感知。
金鑰階層如下:
TDE優缺點分析
優點
- 對應用程式透明,不需修改程式碼
- 保護整個資料庫檔案,包含交易日誌
- 備份檔案也跟著加密,不需額外設定
缺點
- 效能略有影響(通常在 5% 以內,I/O 密集的工作負載較明顯)
- 只保護靜態資料,記憶體中的資料仍是明文
- 金鑰管理需要額外規劃,搬移到其他執行個體時必須一起帶走憑證
實作步驟
1. 建立主金鑰(Master Key)
1 | -- 在master資料庫建立主金鑰 |
2. 建立憑證
1 | -- 建立用於TDE的憑證 |
3. 建立資料庫加密金鑰
1 | -- 切換到要加密的資料庫 |
4. 啟用資料庫加密
1 | -- 啟用資料庫加密 |
效能考量
Microsoft 的測試結果顯示 TDE 的效能影響通常在 5% 以內,但實際情況差異很大。影響最大的因素是實體 I/O 的比例——如果資料大量從記憶體的緩衝池讀取,解密幾乎沒有成本;若大量發生實體讀寫(例如全表掃描、大型備份),影響就會比較明顯。
其他影響因素:
- CPU 規格與核心數(加解密是 CPU 密集操作)
- 資料庫大小與存取模式
- 工作負載類型(OLTP vs 批次報表)
實務注意事項
金鑰備份是頭號優先。 憑證一旦遺失,加密的資料庫就無法還原。備份憑證和私鑰後,把這些檔案存放在與資料庫伺服器分離的安全位置(不要都放在同一台機器上)。
還原到新執行個體必須先還原憑證。 TDE 的備份檔案本身是加密的,還原到另一台 SQL Server 時,必須先在目標執行個體建立主金鑰、還原憑證,再還原資料庫,否則會直接報錯。這一點在 DR 演練時最容易踩到。
定期確認加密狀態。 可以用以下查詢檢查:
1 | SELECT |
encryption_state = 3 表示完全加密。初次啟用加密時 percent_complete 會從 0 爬升,大型資料庫可能需要幾分鐘到幾小時。
建立金鑰輪換計畫。 憑證建議每年或依公司資安政策定期輪換,輪換後重新備份新憑證。
常見問題
無法啟用 TDE
通常是以下其中一個原因:權限不足(需要 CONTROL DATABASE)、主金鑰不存在、憑證建立失敗。執行前先確認主金鑰與憑證都在 master 資料庫裡,並查 SQL Server 錯誤日誌取得詳細訊息。
啟用加密後效能下降明顯
先確認是 CPU 還是 I/O 瓶頸。若是 I/O,考慮調整緩衝池大小讓更多資料留在記憶體;若是 CPU,檢查有無其他同時跑的高 CPU 作業。TDE 本身不建議降低加密演算法規格來換效能,AES_256 在現代硬體上的負擔已很小。
小結
TDE 的啟用流程本身不複雜,四個步驟就能完成。真正需要花心思的是金鑰管理:憑證備份、還原流程驗證、金鑰輪換週期。這些沒做好,加密反而可能變成資料復原的阻礙。




