【问题标题】:Redshift: cannot drop user owner default privilegesRedshift:无法删除用户所有者默认权限
【发布时间】:2019-11-14 19:15:57
【问题描述】:

我正在尝试从我的数据库中删除一个用户,但我收到了一个错误:

user "ted.mosby" cannot be dropped because some objects depend on it
Detail: owner of default privileges on new relations belonging to user ted.mosby in schema tv_shows

如何修复此错误并将用户从我的数据库中删除?

我已更改所有者并已撤销 ted.mosby 的所有权限。

【问题讨论】:

    标签: amazon-redshift


    【解决方案1】:

    撤销默认权限:

    ALTER DEFAULT PRIVILEGES FOR USER "ted.mosby" IN SCHEMA tv_shows
       REVOKE ALL ON TABLES FROM "ted.mosby";
    

    您可以在psql 中使用\ddp 来查看是否还有任何默认权限。

    【讨论】:

    • 嗨 Laurenz - 很抱歉投了反对票。如果您将ROLE 更改为USER(现在编辑队列已满),将更改为支持投票。 Redshift中没有角色之类的东西:docs.aws.amazon.com/redshift/latest/dg/…
    • @KarlAnka 感谢您的指点;我已经更新了答案。他们改变了这一点,这太疯狂了。
    • 劳伦兹再次嗨 - 我发布了我自己的答案,因为我在您的回答之后遇到了一些权限问题。我会很感激我的回答(或者更确切地说是问题)的一些输入 - Postgres 的行为方式是否与 Redshift 在这里的行为方式相同,或者我只是以某种方式完全搞砸了我的权限设置?
    • 抱歉,我对 Redshift 一无所知,从我的回答中的错误中应该可以看出这一点。
    【解决方案2】:

    我遇到了同样的问题,但@Laurenz 的回答只是部分帮助了我 - 我遇到了权限问题,因为在撤销默认权限之前,我已经将架构的所有权从 ted.mosby 转移给了我的主用户。 长话短说 - 在转让所有权之前撤销默认权限。

    重现我的问题(我不知道这是 Redshift 中的错误还是预期的行为?):

    -- executed with master user redshift_master
    CREATE USER anton_test_user PASSWORD '***' IN GROUP redshift_dev;
    

    然后使用anton_test_user

    CREATE SCHEMA anton_test_schema;
    CREATE TABLE anton_test_schema.anton_test_table AS SELECT 1 AS anton;
    ALTER DEFAULT PRIVILEGES IN SCHEMA anton_test_schema 
    GRANT SELECT ON TABLES TO GROUP redshift_readonly;
    

    再次使用redshift_master

    ALTER SCHEMA anton_test_schema OWNER TO redshift_master;
    ALTER TABLE anton_test_schema.anton_test_table OWNER TO redshift_master;
    

    现在尝试删除它抱怨默认权限的用户:

    DROP USER anton_test_user;
    

    结果如预期:

    owner of default privileges on new relations belonging to user 
    anton_test_user in schema anton_test_schema;
    

    现在到奇怪的部分,仍然是redshift_master

    ALTER DEFAULT PRIVILEGES FOR USER anton_test_user IN SCHEMA anton_test_schema
    REVOKE ALL ON TABLES FROM redshift_readonly;
    

    Invalid operation: permission denied for schema anton_test_schema。什么?

    如果使用anton_test_user 运行

    ALTER DEFAULT PRIVILEGES IN SCHEMA anton_test_schema
    REVOKE ALL ON TABLES FROM redshift_readonly;
    

    同时提供Invalid operation: permission denied for schema anton_test_schema

    我解决这个问题并能够删除 anton_test_user 的唯一方法是,redshift_master 完全删除架构和表

    DROP TABLE anton_test_schema.anton_test_table;
    DROP SCHEMA anton_test_schema;
    DROP USER anton_test_user; -- it works now
    

    我完全不知情的猜测是 anton_test_user 已经失去了对架构的权限,因此无法在该架构中应用或撤销对用户的授权。

    【讨论】:

    • 在红移中丢弃用户是一场噩梦
    最近更新 更多