pgextwlist
PostgreSQL扩展白名单功能
仓库
dimitri/pgextwlist
https://github.com/dimitri/pgextwlist
源码
pgextwlist-1.19.tar.gz
pgextwlist-1.19.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pgextwlist | 1.19 | SEC | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7390 | pgextwlist | 否 | 是 | 是 | 否 | 否 | 否 | - |
| 相关扩展 | ddlx pgdd pg_permissions adminpack pgaudit set_user pg_catcheck noset |
|---|
missing pg18 on el
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 1.19 | 1817161514 | pgextwlist | - |
| RPM | PIGSTY | 1.19 | 1817161514 | pgextwlist_$v | - |
| DEB | PGDG | 1.19 | 1817161514 | postgresql-$v-pgextwlist | - |
构建
您可以使用 pig build 命令构建 pgextwlist 扩展的 RPM 包:
pig build pkg pgextwlist # 构建 RPM 包
安装
您可以直接安装 pgextwlist 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pgextwlist; # 当前活跃 PG 版本安装
pig ext install -y pgextwlist -v 18 # PG 18
pig ext install -y pgextwlist -v 17 # PG 17
pig ext install -y pgextwlist -v 16 # PG 16
pig ext install -y pgextwlist -v 15 # PG 15
pig ext install -y pgextwlist -v 14 # PG 14
dnf install -y pgextwlist_18 # PG 18
dnf install -y pgextwlist_17 # PG 17
dnf install -y pgextwlist_16 # PG 16
dnf install -y pgextwlist_15 # PG 15
dnf install -y pgextwlist_14 # PG 14
apt install -y postgresql-18-pgextwlist # PG 18
apt install -y postgresql-17-pgextwlist # PG 17
apt install -y postgresql-16-pgextwlist # PG 16
apt install -y postgresql-15-pgextwlist # PG 15
apt install -y postgresql-14-pgextwlist # PG 14
预加载配置:
shared_preload_libraries = 'pgextwlist';
用法
pgextwlist 实现扩展白名单功能:只有明确允许的扩展才能安装,白名单中的扩展即使由非超级用户请求也会以超级用户权限安装。
配置
添加到 postgresql.conf:
local_preload_libraries = 'pgextwlist'
extwlist.extensions = 'hstore,cube,pg_stat_statements'
或按角色设置:
ALTER ROLE adminuser SET extwlist.extensions = 'pg_stat_statements, postgis';
| 参数 | 描述 |
|---|---|
extwlist.extensions | 逗号分隔的白名单扩展列表 |
extwlist.custom_path | 自定义前/后脚本的文件系统路径 |
行为
非超级用户可以安装白名单扩展:
-- 允许(hstore 在白名单中)
CREATE EXTENSION hstore;
-- 阻止(不在白名单中)
CREATE EXTENSION earthdistance;
-- ERROR: extension "earthdistance" is not whitelisted
对于白名单扩展,CREATE EXTENSION、DROP EXTENSION、ALTER EXTENSION ... UPDATE 和 COMMENT ON EXTENSION 操作以超级用户身份运行。
自定义脚本
将脚本放在 ${extwlist.custom_path}/extname/ 目录:
| 脚本 | 时机 |
|---|---|
before--1.0.sql | 安装 1.0 版本之前 |
before-create.sql | CREATE 之前(回退) |
after--1.0.sql | 安装 1.0 版本之后 |
after-create.sql | CREATE 之后(回退) |
before-update.sql / after-update.sql | ALTER EXTENSION UPDATE 前后 |
before-drop.sql / after-drop.sql | DROP EXTENSION 前后 |
自定义脚本支持模板变量:@extschema@、@current_user@、@database_owner@。