如何在PostgreSQL中创建角色组

8
我可以在PostgreSQL中创建角色。以下是创建用户的代码:
  • CREATE ROLE myname WITH LOGIN PASSWORD 'pass';
我可以为此用户设置数据库模式上的权限。以下是授予用户对public模式使用权限的代码:
  • GRANT USAGE ON SCHEMA public TO myname;
我也可以给用户选择的权限。以下是授予用户在public模式中所有表的选择权限的代码:
  • GRANT SELECT ON ALL TABLES IN SCHEMA public TO myname;
但是,我的数据库中有很多用户。我不想为所有用户设置这些权限。实际上,我想创建角色组名:如下所示:
  • viewer
  • editor
  • admin
viewer 将拥有所有表的选择权限
editor 将拥有所有表的选择、插入和更新权限。
而我的用户将分配到这些组中。 请问我要怎么做?
2个回答

15
CREATE ROLE viewer;
CREATE ROLE editor;
CREATE ROLE admin;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO viewer;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO viewer;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT,INSERT,UPDATE ON TABLES TO editor;
GRANT some_other_privs_to_admin_group

之后只需将组授予用户:

GRANT editor TO your_user;

等等其他内容

https://www.postgresql.org/docs/current/static/sql-alterdefaultprivileges.html https://www.postgresql.org/docs/current/static/sql-createrole.html

CREATE ROLE 将一个新的角色添加到 PostgreSQL 数据库集群中。角色是可以拥有数据库对象并具备数据库权限的实体;根据使用方式,角色可以被视为“用户”、“组”或兼而有之。

拥有登录属性的角色可以被视为用户。没有该属性的角色对于管理数据库权限非常有用。


是的 - 授予任何你想要的组应用于所有成员的用户(授予用户组)。 - Vao Tsun
需要登录才能使用查看器和编辑器吗?还是只需登录到我的用户名? - barteloma
更新答案以反映它。LOGIN仅适用于用户 - 通常不允许角色登录。 - Vao Tsun
这个解决方案中,PostgreSQL的版本(9.4,9.5)是否重要? - barteloma
“GRANT <group-role> TO <role>;” 对我来说很关键,谢谢! - helvete

5

正因为如此,建议使用“组”来管理角色(通常使用NOLOGIN),将用户添加到该组中即可赋予他们相应的角色。

在您的情况下:

CREATE ROLE viewer;
GRANT <whatever> TO viewer;
GRANT viewer TO myname;

然后myname将享受授予viewer的所有特权,您不必为每个用户授予和撤销特权而烦恼。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接