【问题标题】:Redshift Revoke Permission not WorkingRedshift 撤销权限不起作用
【发布时间】:2018-02-10 00:15:57
【问题描述】:

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

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

我尝试了 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 年的数据库经验。

【问题讨论】:

  • 您能否提供给我们Minimal, Complete, and Verifiable example,以便我们重现您的情况并尝试诊断?这可以通过显示创建现有配置的命令以及未能产生您所寻求的结果的命令来完成。随时编辑您的问题以添加此信息。
  • 旁注:确保在 SQL Workbench 中打开 auto-commit 以查看任何错误消息,否则第一个错误将阻止将来的命令执行,直到事务已关闭。
  • 谢谢约翰,我会提供详细信息
  • “看起来没有任何工作。” - 您如何测试这些命令是否有效?请注意,您必须是超级用户或对象的所有者才能更改权限。
  • @DaDeem 请问您是否解决了这个问题?因为我现在遇到了同样的问题,而且很莫名其妙......

标签: amazon-web-services amazon-redshift


【解决方案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,请参阅:How do you create a read-only user in PostgreSQL?

【讨论】:

    【解决方案2】:

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

    因此,由于 权限取代了 用户 权限,因此无法撤销单个用户的权限。

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

    REVOKE ALL ON SCHEMA my_schema FROM group my_group;

    【讨论】:

    • 这对我不起作用。我正在努力删除对某些对象具有特权的用户。当我运行查询来识别这些对象时,用户似乎对某些系统表具有特权。我试图撤销它们,但仍然无法删除用户。为这个用户创建一个 tmp 组,然后授予和撤销这个 tmp 组的权限并没有帮助我删除用户..
    【解决方案3】:

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

    除了乔治五世的回答之外,请注意 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 1970-01-01
      • 2016-06-05
      • 2016-02-02
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      相关资源
      最近更新 更多