pg_tde
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_tde | 2.2.1 | SEC | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7500 | pg_tde | 否 | 是 | 是 | 是 | 否 | 否 | - |
| 相关扩展 | pgsodium pgsmcrypto pgcrypto anon pgcryptokey faker sslutils uuid-ossp |
|---|
works on percona postgres tde fork
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 2.2.1 | 1817161514 | pg_tde | - |
| RPM | PIGSTY | 18.4 | 1817161514 | pgtde-$v | - |
| DEB | PIGSTY | 18.4 | 1817161514 | pgtde-$v | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 18.4 el8.x86_64.pg18 : pgtde-18 pgtde-18-18.4-2PIGSTY.el8.x86_64.rpm
| N/A | N/A | N/A | N/A |
| el8.aarch64 | PIGSTY 18.4 el8.aarch64.pg18 : pgtde-18 pgtde-18-18.4-2PIGSTY.el8.aarch64.rpm
| N/A | N/A | N/A | N/A |
| el9.x86_64 | PIGSTY 18.4 el9.x86_64.pg18 : pgtde-18 pgtde-18-18.4-2PIGSTY.el9.x86_64.rpm
| N/A | N/A | N/A | N/A |
| el9.aarch64 | PIGSTY 18.4 el9.aarch64.pg18 : pgtde-18 pgtde-18-18.4-2PIGSTY.el9.aarch64.rpm
| N/A | N/A | N/A | N/A |
| el10.x86_64 | PIGSTY 18.4 el10.x86_64.pg18 : pgtde-18 pgtde-18-18.4-2PIGSTY.el10.x86_64.rpm
| N/A | N/A | N/A | N/A |
| el10.aarch64 | PIGSTY 18.4 el10.aarch64.pg18 : pgtde-18 pgtde-18-18.4-2PIGSTY.el10.aarch64.rpm
| N/A | N/A | N/A | N/A |
| d12.x86_64 | PIGSTY 18.4 d12.x86_64.pg18 : pgtde-18 pgtde-18_18.4-2PIGSTY~bookworm_amd64.deb
| N/A | N/A | N/A | N/A |
| d12.aarch64 | PIGSTY 18.4 d12.aarch64.pg18 : pgtde-18 pgtde-18_18.4-2PIGSTY~bookworm_arm64.deb
| N/A | N/A | N/A | N/A |
| d13.x86_64 | PIGSTY 18.4 d13.x86_64.pg18 : pgtde-18 pgtde-18_18.4-2PIGSTY~trixie_amd64.deb
| N/A | N/A | N/A | N/A |
| d13.aarch64 | PIGSTY 18.4 d13.aarch64.pg18 : pgtde-18 pgtde-18_18.4-2PIGSTY~trixie_arm64.deb
| N/A | N/A | N/A | N/A |
| u22.x86_64 | PIGSTY 18.4 u22.x86_64.pg18 : pgtde-18 pgtde-18_18.4-2PIGSTY~jammy_amd64.deb
| N/A | N/A | N/A | N/A |
| u22.aarch64 | PIGSTY 18.4 u22.aarch64.pg18 : pgtde-18 pgtde-18_18.4-2PIGSTY~jammy_arm64.deb
| N/A | N/A | N/A | N/A |
| u24.x86_64 | PIGSTY 18.4 u24.x86_64.pg18 : pgtde-18 pgtde-18_18.4-2PIGSTY~noble_amd64.deb
| N/A | N/A | N/A | N/A |
| u24.aarch64 | PIGSTY 18.4 u24.aarch64.pg18 : pgtde-18 pgtde-18_18.4-2PIGSTY~noble_arm64.deb
| N/A | N/A | N/A | N/A |
| u26.x86_64 | PIGSTY 18.4 u26.x86_64.pg18 : pgtde-18 pgtde-18_18.4-2PIGSTY~resolute_amd64.deb
| N/A | N/A | N/A | N/A |
| u26.aarch64 | PIGSTY 18.4 u26.aarch64.pg18 : pgtde-18 pgtde-18_18.4-2PIGSTY~resolute_arm64.deb
| N/A | N/A | N/A | N/A |
安装
您可以直接安装 pg_tde 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_tde; # 当前活跃 PG 版本安装
pig ext install -y pg_tde -v 18 # PG 18
dnf install -y pgtde-18 # PG 18
apt install -y pgtde-18 # PG 18
预加载配置:
shared_preload_libraries = 'pg_tde';
创建扩展:
CREATE EXTENSION pg_tde;
用法
来源:
- pg_tde 2.2 setup
- Key-provider and key-management functions
- pg_tde 2.2.0 release notes
- Transparent data encryption limitations
- TDE table access method
- WAL encryption
pg_tde 为 Percona Server for PostgreSQL 提供透明数据加密功能。它通过 tde_heap 访问方法对表数据进行加密,并可以加密 WAL,密钥由文件、HashiCorp Vault 或 KMIP 提供商管理。它并不是可直接用于社区版 PostgreSQL 的即插即用扩展。
预加载和创建扩展
添加库并重启服务器:
shared_preload_libraries = 'pg_tde'
然后在将使用加密表的每个数据库中启用 pg_tde:
CREATE EXTENSION pg_tde;
以超级用户或具有适当权限的数据库所有者身份运行设置。上游 pg_tde 2.2 版本与兼容的 Percona Server for PostgreSQL 17 或 18 版本绑定;2.2.0 发行说明警告称,它不适用于比 17.10 和 18.4 更早版本的 Percona Distribution。
配置密钥提供者
注册一个提供者,然后设置主密钥。本地文件提供者适合用于评估:
SELECT pg_tde_add_database_key_provider_file(
'local-file',
'/secure/path/pg_tde_keys'
);
SELECT pg_tde_set_principal_key(
'app-principal-key',
'local-file'
);
对于生产环境,上游建议使用 Vault 或 KMIP 等外部提供者而不是本地文件提供者。独立于数据库文件保护提供者的凭据、密钥文件、备份和恢复程序。
提供者管理包括针对文件、Vault 和 KMIP 提供者的数据库范围和服务器全局变体,以及列出、更改和删除提供者、检查或轮换主密钥的函数。
创建并转换加密表
使用加密访问方法创建一个表:
CREATE TABLE customer_secrets (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
payload jsonb NOT NULL
) USING tde_heap;
仅在测试过锁、表重写、磁盘空间和备份影响后,才转换现有表:
ALTER TABLE customer_secrets SET ACCESS METHOD tde_heap;
更改表访问方法会重写整张表。请规划维护窗口,并在预演副本上确认索引、备库、备份与恢复流程。
启用 WAL 加密
WAL 加密是一个单独的服务器配置项:
pg_tde.wal_encrypt = on
更改它需要重启。在启用之前,请确保每个主库、备库、备份、归档和恢复主机都具有所需的提供者配置和密钥访问权限。
对象索引
- tde_heap:加密表访问方法。
- pg_tde_add_database_key_provider_file/vault/kmip:数据库范围的提供者注册。
- pg_tde_add_global_key_provider_file/vault/kmip:服务器全局的提供者注册。
- pg_tde_set_principal_key 和 pg_tde_set_server_principal_key:选择用于保护数据加密密钥的主密钥。
- pg_tde_list_all_key_providers:检查已注册的提供者。
- pg_tde_change_key_provider_* 和 pg_tde_delete_key_provider:管理提供者的定义。
- pg_tde.wal_encrypt:启用写前日志记录的加密。
- pg_tde_upgrade:在 2.2 系列中引入的升级助手。
安全性和恢复边界
- pg_tde 会加密受支持的用户表存储,但不会加密所有 PostgreSQL 产物;系统目录、规划器统计信息和临时溢出文件属于文档明确列出的例外。
- 上游警告称,在已发生分歧的节点之间使用 pg_rewind 或 pg_tde_rewind 可能会损坏集群。请遵循文档中的重建/恢复路径,不要假设常规 rewind 是安全的。
- 在未预加载 pg_tde 的情况下开始恢复可能会损坏加密数据。确保在库和密钥存在的情况下验证灾难恢复自动化。
- Percona 文档中提到了与 Citus 和 TimescaleDB 的不兼容性以及对某些 WAL 检查和恢复工具的限制。
- 加密并不能替代 SQL 权限、TLS、主机加固、审计日志或经过测试的备份。丢失密钥可能会使原本完好的备份无法恢复。