首页 > 解决方案 > postgres:如何创建具有插入和更新访问权限的角色

问题描述

我有一个用户db_owner是我的数据库的所有者,名为“销售”。

现在我必须创建两个组(sales_rosales_riu),然后将用户添加到该组中。

sales_ro组应继承(从db_owner)对表的读取访问权限并在销售数据库中执行函数

sales_riu组应该继承(从db_owner)对表的插入和更新访问,并在销售数据库中执行函数。

我们可以在 Postgres 中创建这样两个组吗?

标签: sqlpostgresqladmin

解决方案


您无需创建组即可实现此目的。您可以创建角色并将它们分配给您想要的用户。例如:

CREATE ROLE sales_ro;
CREATE ROLE sales_riu;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO sales_ro;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO sales_ro;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO sales_ro;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT EXECUTE ON FUNCTIONS TO sales_ro;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT,INSERT,UPDATE ON TABLES TO sales_riu;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT EXECUTE ON FUNCTIONS TO sales_riu;

之后,只需将角色授予预期用户:

GRANT sales_ro TO your_user_1;
GRANT sales_riu TO your_user_2;

请参阅链接 1链接 2以了解更多关于ALTER DEFAULT PRIVILEGESCREATE ROLE的信息。

从上面的链接引用以下几点:

CREATE ROLE 向 PostgreSQL 数据库集群添加一个新角色。角色是可以拥有数据库对象并拥有数据库权限的实体;角色可以被视为“用户”、“组”或两者,这取决于它的使用方式。

可以将具有 LOGIN 属性的角色视为用户。没有此属性的角色对于管理数据库权限很有用


推荐阅读