【问题标题】:How do I inherit a role's priveleges?如何继承角色权限?
【发布时间】:2021-01-17 07:49:09
【问题描述】:

我在 psql 中创建了一个 engineering 角色,然后创建了一个用户角色。当我将 engineering 角色授予用户角色时,用户角色不会获得任何特权。请注意,engineering 是使用 login 权限创建的。

postgres=# create role johnnyb inherit;
CREATE ROLE
postgres=# grant engineering to johnnyb;
GRANT ROLE
postgres=# \du
                                      List of roles
  Role name  |                         Attributes                         |   Member of
-------------+------------------------------------------------------------+---------------
 engineering | Create role, Create DB                                     | {}
 johnnyb     | Cannot login                                               | {engineering}
 postgres    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

inherit 关键字似乎没有任何作用。我错过了什么?我希望能够向少数用户授予 engineering 权限(开始)。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    LOGIN 是一个不被继承的特殊特权。根据对数据库对象的权限测试您的继承,例如表上的SELECT,它应该可以正常工作。确保在测试时您知道public 的权限是什么,以避免任何陷阱。

    来自The manual

    角色属性 LOGIN、SUPERUSER、CREATEDB 和 CREATEROLE 可以被认为是特殊权限,但它们永远不会像数据库对象的普通权限那样被继承。您实际上必须将 SET ROLE 设置为具有这些属性之一的特定角色才能使用该属性。继续上面的示例,我们可能选择将 CREATEDB 和 CREATEROLE 授予管理员角色。那么以角色 joe 身份连接的会话不会立即拥有这些权限,只有在执行 SET ROLE admin 之后。

    【讨论】:

    • 正确。从技术上讲,您可以将 ok LOGIN 视为角色本身的属性而不是特权。
    • 哇,我昨晚完全错过了最后一段。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 2021-01-06
    • 2013-09-29
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    相关资源
    最近更新 更多