将角色组授予角色并没有从 postgres 中的角色组继承配置

Granting rolegroup to role did not inherit the config from rolegroup in postgres

我们有一个场景,其中一些用户需要超级用户权限,而其他数据库用户不需要。所以我们创建了用户,然后创建了一个角色 'SuperRole',它有权创建角色 db.

假设我默认使用 INHERIT 将用户 'User1' 映射到角色 'User1'。创建 'SuperRole' 角色后,我有 运行

GRANT superrole to user1;

之后如果我看到 \du 输出

postgres=# \du user1
                    List of roles
  Role name   |       Attributes       |  Member of
--------------+------------------------+--------------
 user1        | Create role, Create DB | {superrole}

根据文档 https://www.postgresql.org/docs/11/role-membership.html,角色 'member of' 的特权也应该被继承。但是当我用 user1 连接到 psql 时,我应该拥有 superrole 的权限来创建角色和数据库。但是,当我尝试创建数据库时,出现以下错误。

postgres=> create database test;
ERROR:  permission denied to create database

创建角色时也会出现类似的错误。应该怎样做才能使 superrole 的权限集也可用于 user1。

可以将角色属性 LOGIN、SUPERUSER、CREATEDB 和 CREATEROLE 视为特殊权限,但它们绝不会像数据库对象的普通权限那样被继承。您实际上必须将角色设置为具有这些属性之一的特定角色才能使用该属性。

参考:https://www.postgresql.org/docs/current/role-membership.html