关于amazon web services:Redshift Revoke Permission not Working

Redshift Revoke Permission not Working

我有一个包含四个模式(Schema1、Schema2、Schema3 和 Schema 4)的 Amazon Redshift 集群。

我在这个集群中创建了一个用户 User1。我希望这个用户对 Schema1 中的所有表只有只读访问权限。目前,该用户有权访问(选择、插入、更新、删除)所有模式中的所有表。

我尝试了 Redshift 手册中的所有命令,但似乎没有任何效果。

示例:

1
2
3
4
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 年的数据库经验。


就我而言,我遇到的问题是我有 3 个用户属于同一组。
该组已被授予该模式的所有表的所有权限。

因此,撤销单个用户的权限不起作用,因为组权限取代了用户权限。

TL;DR
在我的情况下,解决方案是为每个用户创建一个组,并撤销其他组对架构的访问权限。

REVOKE ALL ON SCHEMA my_schema FROM group my_group;


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

除了乔治五世的回答之外,请注意 Redshift 中有一个 PUBLIC 组,它授予每个用户权限。

PUBLIC represents a group that always includes all users. An individual user's privileges consist of the sum of privileges granted to PUBLIC, privileges granted to any groups that the user belongs to, and any privileges granted to the user individually.

(来自关于 GRANT 的文档)

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

1
2
3
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;

这些命令似乎有效:

1
2
3
4
5
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 中创建只读用户?