如何继承角色的特权?

时间:2020-10-01 14:52:29

标签: postgresql

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

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 | {}

继承关键字似乎无效。我想念什么?我希望能够向一些用户授予 engineering 特权(开始)。

1 个答案:

答案 0 :(得分:1)

LOGIN是未继承的特殊特权。根据对数据库对象(例如表上的SELECT)的权限测试继承,它应该可以正常工作。确保在进行测试时,您知道public的权限是什么,以避免任何麻烦。

来自The manual

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