supautils

用于在云环境中确保数据库集群的安全

概览

扩展包名版本分类许可证语言
supautils3.2.1SECApache-2.0C
ID扩展名BinLibLoadCreateTrustReloc模式
7010supautils-
相关扩展passwordcheck_cracklib pgsodium supabase_vault pg_session_jwt anon pg_tde pgsmcrypto pgaudit

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY3.2.11817161514supautils-
RPMPIGSTY3.2.11817161514supautils_$v-
DEBPIGSTY3.2.11817161514postgresql-$v-supautils-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
d13.aarch64
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
u22.x86_64
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
u22.aarch64
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
u24.x86_64
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
u24.aarch64
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
PIGSTY 3.2.1
u26.x86_64
u26.aarch64

构建

您可以使用 pig build 命令构建 supautils 扩展的 RPM / DEB 包:

pig build pkg supautils         # 构建 RPM / DEB 包

安装

您可以直接安装 supautils 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

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';

用法

来源:READMEhomepagereleases

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.superuser
  • supautils.privileged_role
  • supautils.privileged_role_allowed_configs
  • supautils.privileged_extensions
  • supautils.extension_custom_scripts_path
  • supautils.constrained_extensions
  • supautils.extensions_parameter_overrides
  • supautils.policy_grants
  • supautils.drop_trigger_grants
  • supautils.reserved_roles
  • supautils.reserved_memberships
  • supautils.hint_roles
  • supautils.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 和行为保证,不要暗示任何上游已明确声明“不会创建”的数据库对象。


最后修改 2026-05-01: update extension data (e399d22)