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:无法删除用户所有者默认权限的主要内容,如果未能解决你的问题,请参考以下文章