帮你快速理解、总结文档立即下载

TDE 透明数据加密

最近更新时间:2026-08-20 17:19:01
我的收藏

功能背景

随着数据安全保护的要求越来越严格,各国各地域的信息安全保护法都提到要求数据库进行加密存储。通过数据加密防止意外数据文件遗失导致的数据泄露问题。

功能介绍

云数据库 PostgreSQL 提供透明数据加密(Transparent Data Encryption,TDE)功能,透明加密指数据的加解密操作对用户透明,支持对数据文件进行实时 I/O 加密和解密,在数据写入磁盘前进行加密,从磁盘读入内存时进行解密,可满足静态数据加密的合规性要求。加密使用的密钥由密钥管理服务 KMS 产生和管理。

支持版本

PostgreSQL 10及以上版本。

适用场景

透明数据加密指数据的加解密操作对用户透明,支持对数据文件进行实时 I/O 加密和解密,在数据写入磁盘前进行加密,从磁盘读入内存时进行解密,可满足静态数据加密的合规性要求。

功能说明

加密原理

TDE 在数据库内核的数据页读写路径上完成加解密,对应用程序完全透明,业务无需感知,也无需修改任何 SQL 或应用程序代码。其工作原理如下:
加密时机:数据页在写入磁盘前完成加密,从磁盘读入内存后立即解密,业务读写过程中不需要任何额外操作。
加密粒度:以数据页(默认8KB)为单位进行加密。数据页的头部元数据(如日志序列号、页类型等)保留明文,便于数据库正常识别页结构;页内的数据区使用 AES-256 算法加密。
加密与解密流程:每次数据页落盘时,内核在缓冲区中对该页的数据区执行加密后再写入磁盘;每次从磁盘读取数据页时,内核在返回给上层使用前先完成解密。因此磁盘上保存的始终是密文,而内存和网络传输中均为明文。
加密范围:参与加密的是表、索引等主数据文件;WAL 日志不参与加密。
安全性:加密后的数据文件无法脱离对应密钥被解读,即使数据文件被非法复制,也无法直接获取其中的明文数据,从而满足静态数据加密的合规性要求。

密钥管理

加密密钥由 腾讯云密钥管理服务(KMS)产生和管理,采用“主密钥 + 数据密钥”的两层密钥体系:
密钥类型
作用
用户主密钥(CMK)
用于加密保护数据密钥,可在密钥管理服务中创建和管理,或使用系统默认主密钥
数据密钥(DEK)
由 KMS 基于主密钥生成,用于 AES-256 加密业务数据,并以密文形式保存;仅在实例运行时由 KMS 解密后交给数据库内核使用

开通方式

TDE 在创建实例时开通,创建完成后不可关闭,也不可更换加密算法。开启透明数据加密功能与数据库透明加密的详细介绍,请参见 透明数据加密

查看加密状态

通过 SQL 查看

您可以在任意可用账号下执行以下语句查看实例的加密状态:
postgres=> SHOW data_encryption_cipher;
data_encryption_cipher
------------------------
none
(1 row)
返回值说明:
返回值
含义
aes-256
实例已开启数据加密
none
实例未开启数据加密

通过控制台查看

登录 云数据库 PostgreSQL 控制台,进入云数据库 PostgreSQL 的实例详情页,在配置信息区域可查看该实例是否已开启数据加密。

使用限制

加密能力在创建实例时确定,创建完成后不可关闭加密,也不可更换加密算法。
WAL 日志不参与加密。
加密实例暂不支持通过数据库大版本升级方式升级内核大版本。如需更换内核大版本,请评估后在目标大版本中新建实例并迁移数据。

常见问题

Q:开启 TDE 加密后,业务代码需要修改吗?

A:不需要。TDE 的加解密在数据库内核中完成,对应用程序完全透明,读写数据的方式与未加密实例一致。

Q:加密实例的备份、恢复和只读实例功能是否受影响?

A:不受影响。备份恢复、只读实例等常规能力均基于相同的密钥体系工作,使用方式与未加密实例一致。