has_parameter_privilege()
是一个系统函数,用于报告用户是否对配置参数具有指定的权限。
has_parameter_privilege()
在PostgreSQL 15中添加。
用法
has_parameter_privilege ( [user
name
oroid
, ]parameter
text
,privilege
text
)
→boolean
从PostgreSQL 15开始,可以显式地将配置参数上的权限授予非超级用户。 has_parameter_privilege()
如果未指定用户,则报告当前用户的权限。
允许的权限类型为
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 文档: 访问权限查询函数