pg_enigma
PostgreSQL 加密数据类型
仓库
SoftwareLibreMx/pg_enigma
https://github.com/SoftwareLibreMx/pg_enigma
源码
pg_enigma-0.5.0.tar.gz
pg_enigma-0.5.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_enigma | 0.5.0 | SEC | MIT | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7070 | pg_enigma | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | pgsodium pgcryptokey pgcrypto pg_tde |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.5.0 | 1817161514 | pg_enigma | - |
| RPM | PIGSTY | 0.5.0 | 1817161514 | pg_enigma_$v | - |
| DEB | PIGSTY | 0.5.0 | 1817161514 | postgresql-$v-enigma | - |
构建
您可以使用 pig build 命令构建 pg_enigma 扩展的 RPM / DEB 包:
pig build pkg pg_enigma # 构建 RPM / DEB 包
安装
您可以直接安装 pg_enigma 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
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 为 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) | 从内存中移除私钥 |