noset

阻止非超级用户使用SET/RESET设置变量

概览

扩展包名版本分类许可证语言
pg_noset0.3.0SECAGPL-3.0C
ID扩展名BinLibLoadCreateTrustReloc模式
7420noset-
相关扩展pg_readonly pg_permissions set_user pgaudit login_hook sepgsql safeupdate credcheck

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.3.01817161514pg_noset-
RPMPIGSTY0.3.01817161514noset_$v-
DEBPIGSTY0.3.01817161514postgresql-$v-noset-
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
d13.aarch64
u22.x86_64
u22.aarch64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
u24.x86_64
u24.aarch64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0

构建

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

pig build pkg pg_noset         # 构建 RPM / DEB 包

安装

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

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pg_noset;          # 当前活跃 PG 版本安装
pig ext install -y pg_noset -v 18  # PG 18
pig ext install -y pg_noset -v 17  # PG 17
pig ext install -y pg_noset -v 16  # PG 16
pig ext install -y pg_noset -v 15  # PG 15
pig ext install -y pg_noset -v 14  # PG 14
dnf install -y noset_18       # PG 18
dnf install -y noset_17       # PG 17
dnf install -y noset_16       # PG 16
dnf install -y noset_15       # PG 15
dnf install -y noset_14       # PG 14
apt install -y postgresql-18-noset   # PG 18
apt install -y postgresql-17-noset   # PG 17
apt install -y postgresql-16-noset   # PG 16
apt install -y postgresql-15-noset   # PG 15
apt install -y postgresql-14-noset   # PG 14

预加载配置

shared_preload_libraries = 'noset';

创建扩展

CREATE EXTENSION noset;

用法

noset: 阻止用户通过 SET/RESET 更改会话参数

noset 是一个可加载模块,阻止特定用户使用 SETRESET 命令更改会话参数。

CREATE EXTENSION noset;

配置

添加到 postgresql.conf

shared_preload_libraries = 'noset'

GUC 参数

参数默认值描述
noset.enabledfalse为该角色启用 SET/RESET 阻止
noset.parameters*要阻止的参数(逗号分隔,* = 全部)

设置按用户限制

-- 阻止用户的所有 SET/RESET
ALTER USER appuser SET noset.enabled = true;

-- 仅阻止特定参数
ALTER USER appuser SET noset.enabled = true;
ALTER USER appuser SET noset.parameters = 'work_mem,jit';

示例

-- 作为 appuser:
SET work_mem = '1GB';
-- ERROR: permission denied to set/reset parameter 'set work_mem = '1GB';'

SET maintenance_work_mem = '1GB';
-- SET(允许,不在阻止列表中)

查找受限用户

SELECT usename, useconfig FROM pg_user
WHERE useconfig IS NOT NULL
  AND array['noset.enabled=on'] <@ useconfig;

注意事项

  • 不适用于超级用户
  • 该扩展撤销了 PUBLIC 对 set_config 函数的访问权限

最后修改 2026-03-14: update extension metadata (953cbd0)