sql - postgres:如何创建具有插入和更新访问权限的角色
问题描述
我有一个用户db_owner
是我的数据库的所有者,名为“销售”。
现在我必须创建两个组(sales_ro
和sales_riu
),然后将用户添加到该组中。
sales_ro
组应继承(从db_owner
)对表的读取访问权限并在销售数据库中执行函数
sales_riu
组应该继承(从db_owner
)对表的插入和更新访问,并在销售数据库中执行函数。
我们可以在 Postgres 中创建这样两个组吗?
解决方案
您无需创建组即可实现此目的。您可以创建角色并将它们分配给您想要的用户。例如:
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 PRIVILEGES
和CREATE ROLE
的信息。
从上面的链接引用以下几点:
CREATE ROLE 向 PostgreSQL 数据库集群添加一个新角色。角色是可以拥有数据库对象并拥有数据库权限的实体;角色可以被视为“用户”、“组”或两者,这取决于它的使用方式。
可以将具有 LOGIN 属性的角色视为用户。没有此属性的角色对于管理数据库权限很有用