使用PostgreSQL,并且希望只有管理员才能创建新用户。同时允许一些非管理员用户对我们的表进行读写访问。
我找不到解决办法。我担任过一个叫webuser
的角色:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO webuser;
但是现在webuser
可以访问呼叫CREATE USER
和GRANT ROLE
。如何在允许webuser
进入数据库表的同时从SELECT, INSERT, UPDATE, DELETE
删除访问权限以执行用户管理操作?
答案 0 :(得分:2)
一个用户只有拥有createrole
属性,才能创建其他用户:创建用户时,默认情况下未分配此属性。
Doc.说:
CREATEROLE NOCREATEROLE
这些子句确定是否允许一个角色创建新角色(即执行CREATE ROLE)。 CREATEROLE的角色 特权还可以更改和删除其他角色。如果未指定, 默认为NOCREATEROLE。
使用createrole
创建用户,或者运行超级用户alter user webuser createrole
。
要撤消该特权,请运行alter user webuser nocreaterole
NB:
CREATE USER现在是CREATE ROLE的别名。唯一的区别是 当命令拼写为CREATE USER时,LOGIN被假定为 默认值,而拼写该命令时则假定为NOLOGIN 角色。