在安全合規或靜態數據加密等場景下,推薦使用透明數據加密TDE(Transparent Data Encryption)功能,對數據文件執行實時I/O加密和解密,通過在數據庫層執行靜態數據加密,阻止可能的攻擊者繞過數據庫直接從存儲中讀取敏感信息,有效提高數據庫中敏感數據的安全性。更多數據庫加密技術介紹和對比,請參見不同數據庫加密技術對比。
背景信息
簡介:TDE通過在數據庫層執行靜態數據加密,阻止可能的攻擊者繞過數據庫直接從存儲中讀取敏感信息。開啟透明數據加密TDE功能后,會對數據在寫入磁盤之前進行加密,從磁盤讀入內存時進行解密。經過數據庫身份驗證的應用和用戶可以繼續透明地訪問應用數據(不需要更改應用代碼或配置),而嘗試讀取表空間文件中的敏感數據的OS用戶以及嘗試讀取磁盤或備份信息的未知用戶將不允許訪問明文數據。
密鑰:TDE加密使用的密鑰由密鑰管理服務(KMS)產生和管理,RDS不提供加密所需的密鑰和證書。您可以使用阿里云自動生成的密鑰,也可以使用自定義密鑰并授權RDS使用。
加密算法:開通TDE后,不同數據庫版本的加密算法如下所示。
數據庫版本 | 支持的加密算法 | 配置加密算法 |
MySQL 5.6 |
| 不支持配置 |
MySQL 5.7、8.0 |
| 使用參數 |
參數innodb_encrypt_algorithm
會影響實例內所有加密數據的加解密算法選擇,包括加密表、加密日志,若參數和數據實際的加密算法不同,會導致解析失敗,請謹慎切換。建議在切換參數innodb_encrypt_algorithm
的值前,將已加密的數據全部解密,切換加密算法后再重新加密。
前提條件
實例系列、存儲類型與數據庫版本需要滿足以下條件:
RDS MySQL 8.0高可用系列本地盤及云盤實例(內核小版本20191015及以上)
RDS MySQL 5.7高可用系列本地盤及云盤實例(內核小版本20191015及以上)
RDS MySQL 5.6
已使用阿里云主賬號授權RDS訪問密鑰管理服務KMS(Key Management Service)。詳情請參見授權PolarDB訪問KMS。
已開通密鑰管理服務(KMS)。如果您未開通KMS,可在開通TDE過程中根據引導開通KMS。
注意事項
TDE開通后無法關閉,無法修改密鑰,會顯著增加CPU使用率。
實例切換:TDE開通過程中會重啟實例造成實例切換,建議在業務低峰期操作,并確保應用具有自動重連機制。實例切換的影響請參見實例切換的影響。
代碼修改:開通TDE不會增加數據文件的大小,應用側無需修改代碼與配置即可使用TDE功能。
數據恢復:TDE開通后,實例無法支持跨地域恢復,如需恢復數據到本地,需要先解密數據。
內核版本:為保證實例的穩定性,建議您將內核小版本升級到最新。如果主實例包含只讀實例,建議將所有只讀實例和主實例的內核小版本都升級到最新。更多信息,請參見升級內核小版本。
變更配置:開啟TDE的實例,暫不支持將高可用系列變更為集群系列。
自定義密鑰:使用已有自定義密鑰時,需要注意以下事項。
KMS實例不可用(過期或刪除)、禁用密鑰、設置密鑰刪除計劃或者刪除密鑰材料都會造成密鑰不可用。
撤銷授權關系后,重啟RDS實例會導致RDS實例不可用。
需要使用主賬號或者具有
AliyunSTSAssumeRoleAccess
權限的賬號。KMS實例或加密使用密鑰不可用會造成RDS實例數據不可恢復。
說明關于密鑰的相關操作請參見密鑰管理服務。
開通透明數據加密TDE
您可以使用阿里云自動生成的密鑰開通TDE功能,也可以使用自定義密鑰并授權RDS使用。
使用TDE加密與解密數據
加密數據
您可以登錄數據庫,使用以下命令對待加密的表進行加密。
開通TDE功能后,已有數據表不會自動加密,需要手動執行以下命令完成加密操作。
MySQL 5.6
alter table <tablename> engine=innodb,block_format=encrypted;
MySQL 5.7或8.0
alter table <tablename> encryption='Y';
解密數據
您可以登錄數據庫,使用以下命令對數據進行解密。
MySQL 5.6
alter table <tablename> engine=innodb,block_format=default;
MySQL 5.7或8.0
alter table <tablename> encryption='N';
常見問題
開啟TDE后,常用數據庫工具(Navicat等)還能正常使用嗎?
可以正常使用。
開啟TDE后,還能正常遷移數據到其他RDS實例嗎?
可以正常遷移。
加密后查看數據為什么還是明文的?
查詢數據時會解密并讀取到內存,所以是明文顯示。開啟TDE可以防止備份泄露導致數據泄露,備份文件是加密的,無法用于恢復到本地,如果要恢復數據到本地,需要先解密數據。
相關文檔
如果您還需要對實例訪問鏈路進行加密,可以開啟SSL鏈路加密,具體操作請參見使用云端證書快速開啟SSL鏈路加密。
關于密鑰的相關操作請參見密鑰管理服務。
相關API
API | 描述 |
開啟RDS實例透明數據加密時,需將TDEStatus參數設置為Enabled,其他參數請按需設置。 |