plpgsql_wrap
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
plpgsql_wrap | 1.0 | SIM | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 9210 | plpgsql_wrap | 否 | 是 | 否 | 是 | 否 | 否 | - |
PGDG RPM and Pigsty DEB package hexacluster/plpgsql_wrap 1.0; control requires plpgsql and superuser=true; links OpenSSL.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 1.0 | 1817161514 | plpgsql_wrap | plpgsql |
| RPM | PGDG | 1.0 | 1817161514 | plpgsql_wrap_$v | openssl-libs |
| DEB | PIGSTY | 1.0 | 1817161514 | postgresql-$v-plpgsql-wrap | libssl3 |
构建
您可以使用 pig build 命令构建 plpgsql_wrap 扩展的 RPM / DEB 包:
安装
您可以直接安装 plpgsql_wrap 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
创建扩展:
用法
来源:README、v1.0 release、control file
plpgsql_wrap 为 PostgreSQL 提供 Oracle WRAP 风格的 procedural language。使用 LANGUAGE plpgsql_wrap 编写的函数会先按 PL/pgSQL 校验,然后以 PLPGSQLWRAP:1:<hex> 形式加密存储在 pg_proc.prosrc 中。
带 Key 安装
使用 32-byte AES-256-GCM key 构建扩展:
备份该 key。只有正确的 compiled key 可用时,wrapped functions 才能安全 unwrap 或 restore。
在每个需要该 language 的数据库中安装扩展:
创建 Wrapped Functions
使用普通 PL/pgSQL 语法,只是 language name 不同:
存储的函数体不可读:
Dump、Restore 与 Unwrap
pg_dump 会输出加密后的 PLPGSQLWRAP:1: blob。在具有相同 compiled key 的服务器上 restore 可以正常工作。不同 key 会保留 blob,但调用时如果 validator/authentication path 无法认证它,就会失败。
superuser 知道 key 时,可以永久 unwrap 一个函数:
注意事项
- 版本 1.0 支持 PostgreSQL 14-18。
- Control file 要求
plpgsql,并且需要 superuser installation。 - 这可以防止随意查看源码和 dumps,但 compiled key 是关键 secret。应相应保护 package artifacts 和 build logs。
- 语法会在加密前校验,因此普通 PL/pgSQL syntax errors 会在写入 encrypted storage 前中止
CREATE FUNCTION。
这个页面对您有帮助吗?
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)