更改角色的默认权限

Gen*_*Gen 5 postgresql permissions postgresql-9.5

我有一个名为 Blackacre 的数据库和两个可以访问它的角色:johnrolejanerolejanerole已被授予ALL特权,而johnrole仅被授予SELECT特权。

问题是当来自janerole的用户创建一个新表时,来自johnrole的用户不能SELECT从新表中创建。

ERROR:  permission denied for relation mopery
Run Code Online (Sandbox Code Playgroud)

我尝试以ALTER DEFAULT不同的方式使用来自动化:

ALTER DEFAULT PRIVILEGES FOR ROLE johnrole IN SCHEMA public
   GRANT SELECT ON TABLES TO johnrole;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO johnrole;
ALTER DEFAULT PRIVILEGES FOR ROLE johnrole GRANT SELECT ON TABLES TO PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO GROUP johnrole;
Run Code Online (Sandbox Code Playgroud)

他们都没有工作,我仍然以同样的错误告终。

当我使用ALTER DEFAULT自动为用户(例如john)授予未来的表权限时,一切正常,他可以SELECT从数据库中创建的新表中没有任何错误。

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO john;
Run Code Online (Sandbox Code Playgroud)

这就是我将人员添加到角色的方式:

GRANT johnrole TO adam;
GRANT janerole TO eva;
Run Code Online (Sandbox Code Playgroud)

在 Blackacre 数据库上授予使用权限,如下所示:

GRANT USAGE ON SCHEMA public TO johnrole;
GRANT USAGE ON SCHEMA public TO janerole;
Run Code Online (Sandbox Code Playgroud)

给了一些这样的特权:

GRANT ALL ON ALL TABLES IN SCHEMA public TO janerole;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO johnrole;
Run Code Online (Sandbox Code Playgroud)

之后,我尝试授予自动权限,ALTER DEFAULT如上所述不起作用。任何想法如何让默认权限正常工作?

Erw*_*ter 6

janerole已被授予ALL特权且johnrole仅被授予SELECT特权。

在所有尝试中,您至少获得了该命令的一个方面:
更改创建对象的角色的默认权限 - 这反过来将权限授予另一个角色。IE:

ALTER DEFAULT PRIVILEGES FOR ROLE janerole IN SCHEMA public
GRANT SELECT ON TABLES TO johnrole;
Run Code Online (Sandbox Code Playgroud)

在以janerole(或角色成员)身份登录时执行此操作。

请注意,默认权限适用于目标角色,不适用于该角色的成员。

GRANT USAGE ON SEQUENCES如果您有任何串行列,也不要忘记。可能SELECTUPDATE也。

可能还有更多问题,问题不完全清楚。

有关的:

注意: pgAdmin 中存在一个未解决的错误,显示可能不正确(在当前的 pgAdmin 1.22 中仍然有效)。

  • 当默认权限仅适用于目标角色时,我将如何自动将这些权限分配给该角色的成员?因为仅向该角色用户无法获得这些权限的角色授予权限是毫无意义的。 (2认同)