我在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 特权(开始)。
答案 0 :(得分:1)
LOGIN
是未继承的特殊特权。根据对数据库对象(例如表上的SELECT
)的权限测试继承,它应该可以正常工作。确保在进行测试时,您知道public
的权限是什么,以避免任何麻烦。
可以将角色属性LOGIN,SUPERUSER,CREATEDB和CREATEROLE视为特殊特权,但它们永远不会像数据库对象的普通特权那样被继承。实际上,您必须将ROLE设置为具有这些属性之一的特定角色,才能使用该属性。继续上面的示例,我们可能选择将CREATEDB和CREATEROLE授予管理员角色。然后,仅在执行SET ROLE管理员之后,作为角色joe连接的会话将不会立即具有这些特权。