Redshift:无法删除用户所有者默认权限

Posted

技术标签:

【中文标题】Redshift:无法删除用户所有者默认权限【英文标题】:Redshift: cannot drop user owner default privileges 【发布时间】: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 的所有权限。

【问题讨论】:

【参考方案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 已经失去了对架构的权限,因此无法在该架构中应用或撤销对用户的授权。

【讨论】:

在红移中丢弃用户是一场噩梦

以上是关于Redshift:无法删除用户所有者默认权限的主要内容,如果未能解决你的问题,请参考以下文章

在 aws redshift 中删除用户

Redshift 表所有权和删除查询

删除 Redshift 架构中的所有表 - 不删除权限

查询redshift中特定表的权限(组和用户)

redshift 更改 udf 更改所有者

用cmd命令更改权限和删除文件