has_parameter_privilege() 是一个系统函数,用于报告用户是否对指定的配置参数拥有指定权限。
has_parameter_privilege() 函数是在PostgreSQL 15中添加的。
用法
has_parameter_privilege ( [usernameoroid, ]parametertext,privilegetext)
→boolean
从PostgreSQL 15开始,可以显式地将权限授予非超级用户对单个配置参数。 has_parameter_privilege() p
如果未指定用户,则报告当前用户的权限。
允许的权限类型是
SET [WITH GRANT OPTION]ALTER SYSTEM [WITH GRANT OPTION]
权限类型不区分大小写。
截至PostgreSQL 15,任何用户都可以查询任何其他用户的参数权限。
变更历史
- PostgreSQL 15
- 已添加(提交 a0ffa885)
示例
has_parameter_privilege() 的基本用法示例
postgres=# \c - foo
You are now connected to database "postgres" as user "foo".
postgres=> ALTER SYSTEM SET work_mem TO '8MB';
ERROR: permission denied to set parameter "work_mem"
postgres=> \c - postgres
You are now connected to database "postgres" as user "postgres".
postgres=# GRANT ALTER SYSTEM ON PARAMETER work_mem TO foo;
GRANT
postgres=# SELECT has_parameter_privilege('foo', 'work_mem', 'ALTER SYSTEM');
has_parameter_privilege
-------------------------
t
(1 row)
postgres=# \c - foo
You are now connected to database "postgres" as user "foo".
postgres=> ALTER SYSTEM SET work_mem TO '8MB';
ALTER SYSTEM
权限类型不区分大小写
postgres=# SELECT has_parameter_privilege('foo', 'work_mem', 'ALTER system');
has_parameter_privilege
-------------------------
t
(1 row)
尝试查询参数不支持的权限类型
postgres=# SELECT has_parameter_privilege('foo', 'work_mem', 'EXECUTE');
ERROR: unrecognized privilege type: "EXECUTE"
参考资料
- PostgreSQL 文档: 访问权限查询函数
