createrole_self_grant

一个 GUC,用于协助非超级用户处理权限

createrole_self_grant 是一个 配置参数,用于确定一个拥有 CREATEROLE 权限的非超级用户创建的角色将自动授予给创建者的特征。

createrole_self_grantPostgreSQL 16 中被添加。

默认值

createrole_self_grant 的默认值为:''空字符串)。

用法

createrole_self_grant 可以设置为包含以下一个或两个值(后一种情况用逗号分隔)

  • set
  • inherit

createrole_self_grant 不提供任何额外的权限,但旨在简化角色创建。在 PostgreSQL 16 之前,一个创建其他角色的非超级用户需要手动执行必要的 GRANT 命令,以便为他们创建的任何角色授予 SET 和/或 INHERIT 权限。

按 PostgreSQL 版本详细信息

createrole_self_grant (PostgreSQL 19)

设置
单位  
类别 客户端连接默认值 / 语句行为
简短描述 设置 CREATEROLE 用户是否自动授予角色给自己,以及具有哪些选项。
扩展描述 空字符串禁用自动自我授予。
上下文 user
变量类型 string
来源 默认
最小值  
最大值  
枚举值  
启动值
重置值
源文件  
源行  
需要重启 false

文档createrole_self_grant

createrole_self_grant (PostgreSQL 18)

设置
单位  
类别 客户端连接默认值 / 语句行为
简短描述 设置 CREATEROLE 用户是否自动授予角色给自己,以及具有哪些选项。
扩展描述 空字符串禁用自动自我授予。
上下文 user
变量类型 string
来源 默认
最小值  
最大值  
枚举值  
启动值
重置值
源文件  
源行  
需要重启 false

文档createrole_self_grant

createrole_self_grant (PostgreSQL 17)

设置
单位  
类别 客户端连接默认值 / 语句行为
简短描述 设置 CREATEROLE 用户是否自动授予角色给自己,以及具有哪些选项。
扩展描述  
上下文 user
变量类型 string
来源 默认
最小值  
最大值  
枚举值  
启动值
重置值
源文件  
源行  
需要重启 false

文档createrole_self_grant

createrole_self_grant (PostgreSQL 16)

设置
单位  
类别 客户端连接默认值 / 语句行为
简短描述 设置 CREATEROLE 用户是否自动授予角色给自己,以及具有哪些选项。
扩展描述  
上下文 user
变量类型 string
来源 默认
最小值  
最大值  
枚举值  
启动值
重置值
源文件  
源行  
需要重启 false

文档createrole_self_grant

变更历史

示例

在此 createrole_self_grant 的用法示例中,我们首先创建一个拥有角色管理权限的角色“alice”。

postgres=# CREATE ROLE alice LOGIN CREATEROLE;
CREATE ROLE

如果 alice 随后创建另一个角色,默认情况下,在没有额外的 GRANT 语句的情况下,他们将无法为此角色使用 SET ROLE

postgres=# \c - alice
You are now connected to database "postgres" as user "alice".

postgres=> CREATE ROLE bob LOGIN;
CREATE ROLE
postgres=> \drg
            List of role grants
 Role name | Member of | Options | Grantor  
-----------+-----------+---------+----------
 alice     | bob       | ADMIN   | postgres
(1 row)

postgres=> SET ROLE bob;
ERROR:  permission denied to set role "bob"

postgres=> GRANT bob TO alice WITH SET OPTION;
GRANT ROLE

postgres=> SET ROLE bob;
SET

通过将 createrole_self_grant 设置为 set,可以避免额外的 GRANT 步骤。

postgres=> DROP ROLE bob;
DROP ROLE

postgres=> SET createrole_self_grant = 'SET';
SET

postgres=> CREATE ROLE bob LOGIN;
CREATE ROLE

postgres=> \drg
            List of role grants
 Role name | Member of | Options | Grantor  
-----------+-----------+---------+----------
 alice     | bob       | SET     | alice
 alice     | bob       | ADMIN   | postgres
(2 rows)

postgres=> SET ROLE bob;
SET

类似地,inherit 选项也消除了对显式 GRANT ... WITH INHERIT OPTION 的需求。

postgres=> SET createrole_self_grant = 'INHERIT';
SET

postgres=> CREATE ROLE bob LOGIN;
CREATE ROLE

postgres=> \drg
            List of role grants
 Role name | Member of | Options | Grantor  
-----------+-----------+---------+----------
 alice     | bob       | INHERIT | alice
 alice     | bob       | ADMIN   | postgres
(2 rows)

分类

GUC 配置项, 用户和角色

另请参阅

SET ROLE

反馈

在此处 提交关于“createrole_self_grant”的任何评论、建议或更正