微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更改Redshift表上的所有权会引发“必须超级用户才能更改所有者”

如何解决更改Redshift表上的所有权会引发“必须超级用户才能更改所有者”

我在使用一些简单的Redshift命令时遇到问题。

我面临的问题是更改表的所有权,这里有更多详细信息。

在我们的Redshift集群中,作为管理员用户,在一个数据库中,我创建了一个架构,并向其添加了2个用户的组:

create schema materialized_views_staging;
create group mv_owners with user paul,ana;

paulana是2位用户,我们的数据分析师使用这些用户来访问Redshift集群。

然后我将架构权限更新为:

grant usage on schema materialized_views_staging TO etl;
grant all on schema materialized_views_staging to group mv_owners;
grant usage on schema materialized_views_staging to group mv_owners;
alter default privileges in schema materialized_views_staging grant all on tables to group mv_owners;

etl是我们用来运行日常ETL作业的用户

运行以上所有paul之后,创建了一个表:

create table materialized_views_staging.hj_insights (idd varchar,amount int);

现在,我们需要更改表所有权,以便每日ETL可以在表运行时将数据插入到表中。

此时paulhj_insights表的所有者。根据{{​​3}},对象的所有者(或超级用户)可以查询修改或授予对象特权。但是,当paul运行以下命令时:

ALTER TABLE materialized_views_staging.hj_insights OWNER TO etl;

他遇到了错误

[2020-10-29 10:19:57] [42501][500310] [Amazon](500310) Invalid operation: must be superuser to change owner;

与文档中所陈述的相反。

您能在我的过程中发现任何不正确的东西吗?我很确定我已经设置了所有必要的权限。

谢谢!

解决方法

此答案适用于PostgreSQL。根据评论,对Amazon Redshift进行了修改,使得这不可能。

更改所有权与授予特权不同,因此您引用的文档中没有涉及这一点。

The PostgreSQL documentation状态:

您必须拥有该表才能使用ALTER TABLE。 [...]要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色必须对表的架构具有CREATE特权。

因此您必须同时是paul(或paul的成员) etl(或etl的成员)才能执行命令。超级用户当然可以随时更改所有权。

最后一句话一定有点令人困惑,所以让我解释一下。在PostgreSQL中,用户和组之间没有区别,两者都是“角色”。因此,就像您可以成为组的成员一样,您也可以成为用户的成员。

因此,进行此所有权更改的一种方法是(临时)使一个用户成为另一用户的成员:

GRANT etl TO paul;

现在,如果您是paul,则您同时是etl的成员,并且可以运行该语句。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。