pgcryptokey
PG密钥管理
仓库
https://momjian.us/download/pgcryptokey/
https://momjian.us/download/pgcryptokey/
源码
pgcryptokey-0.85.tar.gz
pgcryptokey-0.85.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pgcryptokey | 0.85 | SEC | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7320 | pgcryptokey | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | pgcrypto pgsodium pgsmcrypto pg_tde faker passwordcheck_cracklib supautils supabase_vault |
|---|
missing 14 on el pgdg repo
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 0.85 | 1817161514 | pgcryptokey | pgcrypto |
| RPM | PIGSTY | 0.85 | 1817161514 | pgcryptokey_$v | - |
| DEB | PIGSTY | 0.85 | 1817161514 | postgresql-$v-pgcryptokey | - |
构建
您可以使用 pig build 命令构建 pgcryptokey 扩展的 RPM / DEB 包:
pig build pkg pgcryptokey # 构建 RPM / DEB 包
安装
您可以直接安装 pgcryptokey 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pgcryptokey; # 当前活跃 PG 版本安装
pig ext install -y pgcryptokey -v 18 # PG 18
pig ext install -y pgcryptokey -v 17 # PG 17
pig ext install -y pgcryptokey -v 16 # PG 16
pig ext install -y pgcryptokey -v 15 # PG 15
pig ext install -y pgcryptokey -v 14 # PG 14
dnf install -y pgcryptokey_18 # PG 18
dnf install -y pgcryptokey_17 # PG 17
dnf install -y pgcryptokey_16 # PG 16
dnf install -y pgcryptokey_15 # PG 15
dnf install -y pgcryptokey_14 # PG 14
apt install -y postgresql-18-pgcryptokey # PG 18
apt install -y postgresql-17-pgcryptokey # PG 17
apt install -y postgresql-16-pgcryptokey # PG 16
apt install -y postgresql-15-pgcryptokey # PG 15
apt install -y postgresql-14-pgcryptokey # PG 14
创建扩展:
CREATE EXTENSION pgcryptokey CASCADE; -- 依赖: pgcrypto
用法
pgcryptokey 在 PostgreSQL 内部管理加密数据密钥。密钥以加密方式存储,通过访问密码保护,支持系统级和会话级密钥访问。
CREATE EXTENSION pgcryptokey;
密钥管理函数
| 函数 | 描述 |
|---|---|
create_cryptokey(name, byte_len) | 生成新的加密密钥 |
set_cryptokey(name) | 设置当前活动密钥 |
get_cryptokey(name) | 获取密钥材料 |
drop_cryptokey(name) | 删除密钥 |
supersede_cryptokey() | 轮换到新密钥(相同访问密码) |
change_key_access_password() | 更新密钥认证凭据 |
reencrypt_data() | 使用不同密钥重新加密数据 |
会话控制
| 函数 | 描述 |
|---|---|
get_shared_key() | 建立客户端/服务器共享密钥(仅 SSL/Unix) |
set_session_access_password() | 客户端提供的密码认证 |
典型工作流程
-- 创建密钥
SELECT create_cryptokey('mykey', 32);
-- 设置活动密钥
SELECT set_cryptokey('mykey');
-- 使用 pgcrypto 函数和托管密钥加密数据
UPDATE secrets SET data = pgp_sym_encrypt(plaintext, get_cryptokey('mykey'));
-- 解密数据
SELECT pgp_sym_decrypt(data, get_cryptokey('mykey')) FROM secrets;
-- 轮换密钥
SELECT supersede_cryptokey();
访问密码可以在数据库启动时配置以实现系统级访问,也可以由各个客户端按会话配置以实现细粒度安全控制。