一、功能介绍
云数据库 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:不受影响。备份恢复、只读实例等常规能力均基于相同的密钥体系工作,使用方式与未加密实例一致。