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

时间:2021-06-24 14:51:59

标签: postgresql roles

我们有一个场景,一些用户需要超级用户权限,而其他 db 用户不需要它。因此,我们创建了用户,然后创建了一个角色“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,角色“成员”的权限也应该被继承。但是当我使用 user1 连接到 psql 时,我也应该拥有超级角色的权限来创建角色和数据库。但是,当我尝试创建数据库时,出现以下错误。

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

创建角色时也会出现类似的错误。应该怎样做才能使为超级角色设置的权限也对 user1 可用。

1 个答案:

答案 0 :(得分:0)

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

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