全部產品
Search
文件中心

ApsaraDB RDS:設定透明資料加密TDE

更新時間:Sep 01, 2026

在安全合規或待用資料加密等情境下,推薦使用透明資料加密TDE(Transparent Data Encryption)功能,對資料檔案執行即時I/O加密和解密,確保敏感性資料在寫入磁碟之前進行加密,從磁碟讀入記憶體時進行解密,阻止可能的攻擊者繞過資料庫直接從儲存中讀取敏感資訊,有效提高資料庫中敏感性資料的安全性。使用TDE功能不會增加資料檔案的大小,開發人員無需更改任何應用程式。

TDE加密原理

TDE加密在電腦各個層級的體現大致如下:

作業系統層

Microsoft Data Protection API(DPAPI)是Windows作業系統中的一個API,它提供了加密和解密資料的服務,且使用者無需直接處理加密金鑰和演算法的細節。

DPAPI位於TDE整體加密層級的根部,負責在電腦作業系統層級保護密鑰階層,並用於保護資料庫伺服器執行個體的服務主要金鑰(SMK)。

SQL Server執行個體層

在SQL Server中,服務主要金鑰(Service Master Key,簡稱SMK)是資料庫引擎使用的一種進階加密金鑰。它是SQL Server資料庫引擎的根級密鑰,在SQL Server執行個體搭建好時建立,用於保護較低層級的密鑰和資料。

SMK被DPAPI所保護,並用於保護資料庫主要金鑰DMK。

資料庫層

TDE在資料庫這一層級的加密可再細分為Master庫和User庫兩層。

Master庫

在使用TDE時,會在Master庫中建立一個資料庫主要金鑰(Database Master Key,DMK),並使用該DMK建立一個認證,二者均被儲存在Master庫中。

DMK是用來保護資料庫中敏感資訊的一個對稱金鑰,它被SMK所保護,並用來加密認證。Master庫中的認證則用來對User庫中的DEK進行加密。

User庫

User庫中將建立一個僅作用於TDE的新密鑰,稱為資料庫加密金鑰(Database Encryption Key,DEK),它被儲存在User庫中。

DEK被Master庫中的認證保護,DEK所在的整個User庫中的資料都會被該DEK加密保護。資料寫入過程中,被認證加密後的DEK儲存在資料庫中,而未加密的DEK只存在於記憶體中,用於即時加密和解密資料檔案;資料讀取過程中,SQL Server使用認證的私密金鑰來解密儲存在資料庫中的加密DEK,解密後的DEK被載入到記憶體中,用於即時解密資料檔案中的資料,這一過程對於應用程式和使用者是透明的。

當Master庫中沒有TDE認證時,將無法解密DEK,從而導致啟用TDE的資料庫無法通過備份或附加恢複到執行個體上,這也是TDE功能的初衷。

前提條件

  • RDS SQL Server執行個體需滿足以下要求:

    • 執行個體規格:通用型、獨享型(不支援共用型)

    • 計費方式:訂用帳戶或隨用隨付(不支援Serverless執行個體簡介)

    • 執行個體大版本:SQL Server 2019 標準版、SQL Server 2022 標準版、SQL Server 2025 標準版、SQL Server 企業版

    說明
  • 已使用阿里雲主帳號授權RDS存取金鑰管理服務KMS(Key Management Service)。詳情請參見授權RDS訪問KMS。

注意事項

  • 如果您使用阿里雲提供的服務密鑰,開通TDE後產生的備份不能直接恢複到本地。您可以參見TDE使用的最佳實務教程內的方案解決。

  • 開啟TDE後,會對資料庫效能產生一定影響。具體體現如下:

    • 效能影響範圍:根據微軟官方文檔,TDE對資料庫總體效能影響約在3~5%之間。

    • 記憶體中資料的影響較小:如果訪問的大部分資料已經被儲存在記憶體中,TDE對效能的影響會明顯降低。

    • CPU使用率和I/O的影響:TDE加密是一個CPU密集型過程,且在I/O上執行。

      當伺服器或應用程式的I/O操作較少(低I/O負載)且CPU使用率本就不高時,TDE帶來的效能下降會較小;相反對於高CPU使用率的應用程式而言,啟用TDE將產生較大的效能損失(估計約為28%)。

      因此即使是高I/O的應用程式或伺服器,如果CPU使用率足夠低,效能也不會受到太大影響。

使用限制

開啟TDE

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側功能表列中單擊資料安全性。

  3. 在TDE頁簽單擊未開通左邊滑塊。

    說明

    僅特定執行個體支援TDE功能,請參見前提條件。

  4. 選擇密鑰類型,單擊確定,開通TDE。

    使用自動生成的密鑰

    選中需要加密的資料庫,單擊表徵圖,並單擊確定。

    在TDE 設定對話方塊中,依次完成以下操作:

    1. 在可選資料庫面板中勾選目標資料庫(如 zht_ssl)。

    2. 單擊中間的向右箭頭>按鈕,將所選資料庫移至已保護資料庫面板。

    3. 單擊確定。

    使用內建SQL Server祕密金鑰加密

    1. 上傳認證及私密金鑰檔案到OSS。具體操作,請參見上傳檔案。

      上傳檔案到 OSS 的建議:

      • 單個檔案建議通過 OSS 控制台上傳。

      • 多個檔案建議採用斷點續傳方式並調用 OSS OpenAPI。

      • 可利用用戶端形式上傳檔案到 OSS。

    2. 單擊下一步,配置密鑰相關參數。

      參數

      取值及說明

      OSS Bucket

      選擇上傳認證及私密金鑰檔案所在的OSS Bucket。

      證書

      選擇您上傳到OSS的認證檔案。

      私鑰

      選擇您上傳到OSS的私密金鑰檔案。

      密碼

      輸入您自有SQL Server密鑰的密碼。

    3. 單擊下一步進入授權數據庫。

      選中需要加密的資料庫,單擊表徵圖,並單擊確定。

      1. 在可選資料庫面板中勾選需要加密的資料庫(如 tb1 和 tb2)。

      2. 單擊>按鈕將所選資料庫移至已保護資料庫面板。

      3. 單擊確定。

關閉TDE

說明
  • 如需解除單個或多個資料庫層級的TDE加密,只需將目標資料庫從已保護資料庫列表中移除即可。

  • 如需關閉單個執行個體層級的TDE加密功能,需要將所有資料庫從已保護資料庫列表中移除,系統會自動關閉執行個體TDE功能。

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側功能表列中單擊資料安全性。

  3. 在TDE頁簽下,單擊TDE設定。

  4. 在對話方塊右側的已保護資料庫中,選中需要解除TDE加密的資料庫,單擊表徵圖表徵圖,並單擊確定。

說明

關閉TDE功能涉及到資料庫的多個操作,包括等待上一次備份完成、資料解密、日誌記錄、中繼資料更新等。特別是資料解密操作,作為一個資源密集型操作,它會顯著佔用CPU、記憶體和I/O資源,該操作所耗費的時間與資料量成正比,因此擁有大規模資料的資料庫在關閉TDE功能時可能耗時較長(例如資料庫含有200 GB左右資料時,關閉TDE所需時間可能在40分鐘以上)。

若您在關閉TDE後想要查看當前TDE解密的進度,可以使用如下T-SQL:

SELECT 
    db_name(database_id) AS DatabaseName, 
    encryption_state, 
    percent_complete 
FROM 
    sys.dm_database_encryption_keys;

相關文檔