pg_enigma

PostgreSQL 加密数据类型

概览

扩展包名版本分类许可证语言
pg_enigma0.5.0SECMITRust
ID扩展名BinLibLoadCreateTrustReloc模式
7070pg_enigma-
相关扩展pgsodium pgcryptokey pgcrypto pg_tde

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.5.01817161514pg_enigma-
RPMPIGSTY0.5.01817161514pg_enigma_$v-
DEBPIGSTY0.5.01817161514postgresql-$v-enigma-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u22.x86_64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u22.aarch64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u24.x86_64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u24.aarch64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0

构建

您可以使用 pig build 命令构建 pg_enigma 扩展的 RPM / DEB 包:

pig build pkg pg_enigma         # 构建 RPM / DEB 包

安装

您可以直接安装 pg_enigma 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pg_enigma;          # 当前活跃 PG 版本安装
pig ext install -y pg_enigma -v 18  # PG 18
pig ext install -y pg_enigma -v 17  # PG 17
pig ext install -y pg_enigma -v 16  # PG 16
pig ext install -y pg_enigma -v 15  # PG 15
pig ext install -y pg_enigma -v 14  # PG 14
dnf install -y pg_enigma_18       # PG 18
dnf install -y pg_enigma_17       # PG 17
dnf install -y pg_enigma_16       # PG 16
dnf install -y pg_enigma_15       # PG 15
dnf install -y pg_enigma_14       # PG 14
apt install -y postgresql-18-enigma   # PG 18
apt install -y postgresql-17-enigma   # PG 17
apt install -y postgresql-16-enigma   # PG 16
apt install -y postgresql-15-enigma   # PG 15
apt install -y postgresql-14-enigma   # PG 14

创建扩展

CREATE EXTENSION pg_enigma;

用法

pg_enigma: 使用 PGP 和 RSA 密钥的 PostgreSQL 加密数据类型

pg_enigma 为 PostgreSQL 提供 Enigma 加密数据类型,使用 PGP 或 OpenSSL RSA 密钥对静态数据进行加密。数据以加密形式存储,仅在私钥加载到内存中时才进行解密。

CREATE EXTENSION IF NOT EXISTS pg_enigma;

PGP 密钥加密

-- 创建带加密列的表(密钥槽 2)
CREATE TABLE test_pgp (
    id SERIAL,
    val Enigma(2)
);

-- 加载公钥用于加密
SELECT set_public_key_from_file(2, '/path/to/public-key.asc');

-- 插入数据(自动使用公钥加密)
INSERT INTO test_pgp (val) VALUES ('A secret value'::Text);

-- 没有私钥时,SELECT 返回加密的 PGP 消息
SELECT * FROM test_pgp;

-- 加载私钥以启用解密
SELECT set_private_key_from_file(2, '/path/to/private-key.asc', 'passphrase');

-- 现在 SELECT 返回解密的明文
SELECT * FROM test_pgp;
-- id |      val
-- ----+----------------
--   1 | A secret value

-- 从内存中移除私钥
SELECT forget_private_key(2);
-- 后续 SELECT 再次返回加密数据

RSA 密钥加密

CREATE TABLE test_rsa (
    id SERIAL,
    val Enigma(3)
);

SELECT set_public_key_from_file(3, '/path/to/alice_public.pem');
INSERT INTO test_rsa (val) VALUES ('Another secret value'::Text);

SELECT set_private_key_from_file(3, '/path/to/alice_private.pem', 'passphrase');
SELECT * FROM test_rsa;

SELECT forget_private_key(3);

函数

函数描述
set_public_key_from_file(slot, path)加载公钥用于加密
set_private_key_from_file(slot, path, passphrase)加载私钥用于解密
forget_private_key(slot)从内存中移除私钥

最后修改 2026-03-14: update extension metadata (953cbd0)