我有一个用户 db_owner
,他是我名为“Sales”的数据库的所有者。
现在我必须创建两个组(sales_ro
和 sales_riu
),然后我会将用户添加到这些组中。
sales_ro
组应继承(来自 db_owner
)对表的读取访问权限并在 Sales db 中的函数上执行
sales_riu
组应继承(自 db_owner
)对表的插入和更新访问权限,并在 Sales 数据库中的函数上执行。
我们可以在 Postgres 中创建这样的两个组吗?
答案 0 :(得分:0)
您无需创建群组即可实现此目的。您只需创建角色并将其分配给您想要的用户即可。例如:
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;
请参阅 link 1 和 link 2 以分别了解有关 ALTER DEFAULT PRIVILEGES
和 CREATE ROLE
的更多信息。
从上面的链接引用以下几点:
<块引用>CREATE ROLE 向 PostgreSQL 数据库集群添加一个新角色。职务 是一个可以拥有数据库对象并拥有数据库的实体 特权;角色可以被视为“用户”、“组”或两者 取决于它的使用方式。
可以将具有 LOGIN 属性的角色视为用户。角色 没有这个属性对于管理数据库权限很有用