Postgres:即使已经授予权限,仍然无法访问模式

10

我正在运行Postgres 10.4,并且目前感到困惑,因为我似乎无法将模式的访问权限授予另一个角色。

我的目标:

我有一个角色和一个模式,想要从另一个角色访问该模式及其表。 因此,我按照通常的方式进行操作(其他模式有效):

grant usage on schema myschema to newuser;

grant select on all tables in schema myschema to newuser;

这两个语句是以模式所有者的身份运行的。在执行过程中我没有遇到任何错误。

当我作为新用户登录并尝试选择一些数据时:

select * from myschema.table;

I get the error:

SQL Error [42501]: ERROR: permission denied for schema myschema

我可以看到新用户在"information_schema.role_table_grants"表中具有正确的权限。

同样,它也适用于另一个角色和另一个模式。我一筹莫展。


也许你连接了不同的数据库或不同的机器?在两台机器上运行\dn+ myschema(从psql中运行)是否产生相同的输出?能否将结果添加到问题中? - Laurenz Albe
1
嗨@LaurenzAlbe,这指引我找到了我的错误。模式的所有者是另一个角色。看来我之前搞砸了模式。从模式的实际所有者授予“newuser”使用权限是有效的。 - kidman01
2个回答

12

步骤1
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA name_schema TO name_user;

步骤2
GRANT USAGE ON SCHEMA name_schema TO name_user;


1
你的帖子开头是“尝试...”,给人的印象是提出了一个实验来进一步分析问题,而不是真正解决它。请重新表述成肯定的答案,或者创建一个条件性的答案(比如,“你的问题可能是由于...在这种情况下,解决方案是...”),或者删除答案并发表澄清问题的评论。 - Yunnosch
1
仍然面临问题...不知道发生了什么! - ronit
谢谢,@Reaper_20。对我很有用。 - Tora Tora Tora
谁能想到授予所有权限还不够……我可以确认,在授予所有权限之后,“GRANT USAGE”是必需的,以让您的用户甚至执行“SELECT”。 - Václav

4

它确实按照我在问题中发布的方式运作,问题在于我没有使用模式的所有者。

因此,请始终确保为所有者角色授予对模式的访问权限。


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