从用户中撤销公共模式的创建权限-在Postgresql中无法正常工作

5

我正在使用 postgresql -8.4.20 作为 JON 服务器的后端,并使用用户名 rhqadmin 登录到数据库 rhq

连接后,默认情况下会将我重定向到 public 模式。现在,我不想允许此用户 rhqadmin 在 public 模式中创建表。

因此,我使用以下命令撤销了 public 模式上的创建权限:

Revoke Create ON SCHEMA public FROM rhqadmin;

然后它给我一个警告 -

"无法撤销" public "的权限。

当我使用超级用户 postgres 登录并从那里撤销用户 rhqadmin 对公共架构的 'CREATE' 权限时,它不会给出任何警告并成功地撤销了权限,然后我使用用户 rhqadmin 登录并尝试在公共模式中创建表,即使从超级用户中撤销了创建权限,仍然允许我创建表。

请告诉我为什么对于公共方案撤消特权不起作用,或者我做错了什么。

问候,
Avinash

1个回答

17

你的问题是,CREATE权限未授予给rhqadmin,而是授予给特殊角色PUBLIC,默认情况下每个人都属于该角色。

由于在PostgreSQL中,权限是可加的,如果允许所有人做某件事,则没有办法明确禁止单个用户这样做。

解决方案可能是:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

不,到目前为止我已经尝试了上述解决方案,但对于公共模式也没有起作用。我的意思是它不应该允许我在公共模式中创建表,但我仍然可以创建表。 - Avi
psql 中运行 \dn+ public 并将结果添加到问题中,然后我就可以弄清楚发生了什么。您的用户是否被授予任何角色(组)? - Laurenz Albe
2
谢谢Laurenz(抱歉回复晚了),但现在它已经可以工作了。你看,我犯了一个错误,我正在使用postgres用户在postgres数据库中执行此Revoke命令。所以如果我想为连接到rhq db的rhqadmin用户撤销权限,则必须使用postgres用户连接到rhq db,然后给出命令,现在它可以工作了。 :-) - Avi

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