功能背景
随着数据安全保护的要求越来越严格,各国各地域的信息安全保护法都提到要求数据库进行加密存储。通过数据加密防止意外数据文件遗失导致的数据泄露问题。
功能介绍
云数据库 PostgreSQL 提供透明数据加密(Transparent Data Encryption,TDE)功能,透明加密指数据的加解密操作对用户透明,支持对数据文件进行实时 I/O 加密和解密,在数据写入磁盘前进行加密,从磁盘读入内存时进行解密,可满足静态数据加密的合规性要求。加密使用的密钥由密钥管理服务 KMS 产生和管理。
支持版本
PostgreSQL 10及以上版本。
适用场景
透明数据加密指数据的加解密操作对用户透明,支持对数据文件进行实时 I/O 加密和解密,在数据写入磁盘前进行加密,从磁盘读入内存时进行解密,可满足静态数据加密的合规性要求。
功能说明
加密原理
TDE 在数据库内核的数据页读写路径上完成加解密,对应用程序完全透明,业务无需感知,也无需修改任何 SQL 或应用程序代码。其工作原理如下:
加密时机:数据页在写入磁盘前完成加密,从磁盘读入内存后立即解密,业务读写过程中不需要任何额外操作。
加密粒度:以数据页(默认8KB)为单位进行加密。数据页的头部元数据(如日志序列号、页类型等)保留明文,便于数据库正常识别页结构;页内的数据区使用 AES-256 算法加密。
加密与解密流程:每次数据页落盘时,内核在缓冲区中对该页的数据区执行加密后再写入磁盘;每次从磁盘读取数据页时,内核在返回给上层使用前先完成解密。因此磁盘上保存的始终是密文,而内存和网络传输中均为明文。
加密范围:参与加密的是表、索引等主数据文件;WAL 日志不参与加密。
安全性:加密后的数据文件无法脱离对应密钥被解读,即使数据文件被非法复制,也无法直接获取其中的明文数据,从而满足静态数据加密的合规性要求。
密钥管理
密钥类型 | 作用 |
用户主密钥(CMK) | 用于加密保护数据密钥,可在密钥管理服务中创建和管理,或使用系统默认主密钥 |
数据密钥(DEK) | 由 KMS 基于主密钥生成,用于 AES-256 加密业务数据,并以密文形式保存;仅在实例运行时由 KMS 解密后交给数据库内核使用 |
开通方式
查看加密状态
通过 SQL 查看
您可以在任意可用账号下执行以下语句查看实例的加密状态:
postgres=> SHOW data_encryption_cipher;data_encryption_cipher------------------------none(1 row)
返回值说明:
返回值 | 含义 |
aes-256 | 实例已开启数据加密 |
none | 实例未开启数据加密 |
通过控制台查看
使用限制
加密能力在创建实例时确定,创建完成后不可关闭加密,也不可更换加密算法。
WAL 日志不参与加密。
加密实例暂不支持通过数据库大版本升级方式升级内核大版本。如需更换内核大版本,请评估后在目标大版本中新建实例并迁移数据。
常见问题
Q:开启 TDE 加密后,业务代码需要修改吗?
A:不需要。TDE 的加解密在数据库内核中完成,对应用程序完全透明,读写数据的方式与未加密实例一致。
Q:加密实例的备份、恢复和只读实例功能是否受影响?
A:不受影响。备份恢复、只读实例等常规能力均基于相同的密钥体系工作,使用方式与未加密实例一致。