Gen*_*Gen 5 postgresql permissions postgresql-9.5
我有一个名为 Blackacre 的数据库和两个可以访问它的角色:johnrole和janerole。janerole已被授予ALL特权,而johnrole仅被授予SELECT特权。
问题是当来自janerole的用户创建一个新表时,来自johnrole的用户不能SELECT从新表中创建。
Run Code Online (Sandbox Code Playgroud)ERROR: permission denied for relation mopery
我尝试以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如上所述不起作用。任何想法如何让默认权限正常工作?
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如果您有任何串行列,也不要忘记。可能SELECT和UPDATE也。
可能还有更多问题,问题不完全清楚。
有关的:
注意: pgAdmin 中存在一个未解决的错误,显示可能不正确(在当前的 pgAdmin 1.22 中仍然有效)。