Redshift撤销权限不起作用

9

我有一个Amazon Redshift集群,其中包含四个模式(Schema1、Schema2、Schema3和Schema4)。

我在该集群中创建了一个名为User1的用户。我希望该用户只能以只读方式访问Schema1中的所有表。目前,该用户可以访问所有模式中的所有表格(Select、Insert、Update、Delete)。

我尝试了Redshift手册中的所有命令,但似乎都没有起作用。

示例:

REVOKE ALL on schema schema1 from User1
REVOKE ALL on schema schema2 from User1
REVOKE ALL on schema schema3 from User1
REVOKE ALL on schema schema4 from User1

我也尝试了撤销单个权限(插入,更新,删除)。

我还尝试从单个表中撤销权限(插入,更新,删除)。

从手册中尝试了所有的组合方式。我正在使用SQL Workbench,并且所有语句都成功执行,没有任何语法错误。

无法弄清楚原因。任何帮助都将不胜感激。

附言:我有15年的数据库经验,涉及角色和权限。


1
你能否提供一个最小、完整、可验证的示例,以便我们可以重现您的情况并尝试诊断?这可以通过展示创建您现有配置的命令和未能产生所需结果的命令来完成。请随意编辑您的问题以添加此信息。 - John Rotenstein
谢谢John,我会提供细节。 - DaDeem
"看起来好像什么也没运作。" - 你是如何测试这些命令是否已经生效的?请注意,您必须是超级用户或对象的所有者才能更改权限。 - Nathan Griffiths
创建模式schema1; 创建表schema1.foo(名称TEXT); 创建用户user1密码'Abcd1234'; 未授予任何权限的用户"user1"可以访问模式"schema1"中的所有表。不确定如何控制它。在注意到权限后,我尝试撤销它。但是没有成功。我收到了成功执行语句的消息,但权限仍然保持不变。不确定发生了什么。 - DaDeem
3
@DaDeem,我可以问一下你是否解决了这个问题吗?因为我现在也遇到了同样的问题,而且感到非常困惑... - Pranasas
显示剩余3条评论
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
2
在我的情况下,问题是我有三个用户属于同一组。该组已被授予架构中所有表的全部权限。 因此,撤销单个用户的权限无效,因为组权限优先于用户权限。 简而言之,在我的情况下,解决方案是为每个用户创建一个组,并撤销其他组对模式的访问权限。 REVOKE ALL ON SCHEMA my_schema FROM group my_group;

这对我没有用。我正在努力删除一个在某些对象上拥有特权的用户。当我运行查询以识别这些对象时,似乎该用户在一些系统表上拥有特权。我已经尝试撤销它们,但仍然无法删除该用户。为此用户创建一个tmp组,然后授予和撤销对该tmp组的特权并没有帮助我删除该用户。 - femeloper

1
这些命令似乎有效:

CREATE SCHEMA schema1;
CREATE TABLE schema1.foo (name TEXT);
CREATE USER user1 PASSWORD 'Abcd1234';
GRANT USAGE ON SCHEMA schema1 TO user1;
GRANT SELECT ON ALL TABLES IN SCHEMA schema1 TO user1;
然而,它可能不会自动授予对未来创建的表的访问权限。 由于Amazon Redshift基于PostgreSQL 8.0.2,请参见:如何在PostgreSQL中创建只读用户?

1

这可能不是引起 OP 问题的原因,但它解决了我的问题,并且可以解决遇到相同情况并进入此线程的人的问题。

除了 George V 的答案外,请注意在 Redshift 中有一个 PUBLIC 组,它授予每个用户权限。

PUBLIC 表示始终包括所有用户的组。单个用户的特权包括授予 PUBLIC、用户所属的任何组授予的特权以及授予用户个人的任何特权的总和。

(来自 GRANT 文档)

因此,如果您想确保 User1 无法访问 schema2 中的表,例如,您应该运行:

REVOKE ALL on schema schema2 from User1;
REVOKE ALL on schema schema2 from Group1;  --assuming this is the only group of User1
REVOKE ALL on schema schema2 from PUBLIC;

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