supautils
用于在云环境中确保数据库集群的安全
仓库
supabase/supautils
https://github.com/supabase/supautils
源码
supautils-3.2.1.tar.gz
supautils-3.2.1.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
supautils | 3.2.1 | SEC | Apache-2.0 | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7010 | supautils | 否 | 是 | 是 | 否 | 否 | 否 | - |
| 相关扩展 | passwordcheck_cracklib pgsodium supabase_vault pg_session_jwt anon pg_tde pgsmcrypto pgaudit |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 3.2.1 | 1817161514 | supautils | - |
| RPM | PIGSTY | 3.2.1 | 1817161514 | supautils_$v | - |
| DEB | PIGSTY | 3.2.1 | 1817161514 | postgresql-$v-supautils | - |
构建
您可以使用 pig build 命令构建 supautils 扩展的 RPM / DEB 包:
pig build pkg supautils # 构建 RPM / DEB 包
安装
您可以直接安装 supautils 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install supautils; # 当前活跃 PG 版本安装
pig ext install -y supautils -v 18 # PG 18
pig ext install -y supautils -v 17 # PG 17
pig ext install -y supautils -v 16 # PG 16
pig ext install -y supautils -v 15 # PG 15
pig ext install -y supautils -v 14 # PG 14
dnf install -y supautils_18 # PG 18
dnf install -y supautils_17 # PG 17
dnf install -y supautils_16 # PG 16
dnf install -y supautils_15 # PG 15
dnf install -y supautils_14 # PG 14
apt install -y postgresql-18-supautils # PG 18
apt install -y postgresql-17-supautils # PG 17
apt install -y postgresql-16-supautils # PG 16
apt install -y postgresql-15-supautils # PG 15
apt install -y postgresql-14-supautils # PG 14
预加载配置:
shared_preload_libraries = 'supautils';
用法
supautils 是一个可加载库,允许通过配置把部分原本仅限超级用户的 PostgreSQL 能力安全地开放给非超级用户。上游特别强调:它不会在数据库里创建表、函数或 security label。
加载方式
集群级:
shared_preload_libraries = 'supautils'
supautils.privileged_role = 'your_privileged_role'
按角色启用:
ALTER ROLE role1 SET session_preload_libraries TO 'supautils';
特权代理角色能力
README 记录了一个 privileged proxy role,可在不授予 SUPERUSER 的前提下创建 publication、foreign data wrapper、event trigger 和 privileged extension。
SET ROLE privileged_role;
CREATE PUBLICATION p FOR ALL TABLES;
DROP PUBLICATION p;
对于 event trigger,README 说明这些触发器会对非超级用户生效,但会跳过超级用户和 reserved roles;同时它也明确记录了一条限制:在创建 publication、foreign data wrapper 或 extension 时,这些触发器不会触发。
重要配置项
supautils.superusersupautils.privileged_rolesupautils.privileged_role_allowed_configssupautils.privileged_extensionssupautils.extension_custom_scripts_pathsupautils.constrained_extensionssupautils.extensions_parameter_overridessupautils.policy_grantssupautils.drop_trigger_grantssupautils.reserved_rolessupautils.reserved_membershipssupautils.hint_rolessupautils.log_skipped_evtrigs
常见示例
允许非超级用户创建指定 privileged extension:
supautils.privileged_extensions = 'hstore'
允许某个角色管理自己并不拥有的表上的 RLS policy:
supautils.policy_grants = '{ "my_role": ["public.not_my_table"] }'
在 CREATE EXTENSION 时强制把扩展装入指定 schema:
supautils.extensions_parameter_overrides = '{ "pg_cron": { "schema": "pg_catalog" } }'
保护托管服务角色不被 CREATEROLE 用户修改:
supautils.reserved_roles = 'connector, storage_admin'
supautils.reserved_memberships = 'pg_read_server_files'
发布说明
v3.2.1发布于 2026-04-02,公开说明以维护类改动为主,没有新增用户可见 SQL 接口。v3.2.0新增了缺失GRANT权限时的 hint。
注意事项
这是一个强配置驱动的扩展。编写说明时应优先依据 README 中的 GUC 和行为保证,不要暗示任何上游已明确声明“不会创建”的数据库对象。