首页 > 解决方案 > 更改 Redshift 表的所有权会引发“必须是超级用户才能更改所有者”

问题描述

我遇到了一些简单的 Redshift 命令的问题。

我面临的问题是改变表的所有权,这里有更多细节。

在我们的 Redshift 集群中,在我们拥有的一个数据库中,作为管理员用户,我创建了一个模式和组,向其中添加了 2 个用户:

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

我们的数据分析师用于访问 Redshift 集群的 2 个用户在哪里paul以及在哪里。ana

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

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表的所有者。根据AWS 文档,对象的所有者(或超级用户)可以查询、修改或授予对象权限。但是,当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;

这与文档中的说明相反。

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

谢谢!

标签: amazon-web-servicesamazon-redshiftprivileges

解决方案


这个答案适用于 PostgreSQL。根据评论,Amazon Redshift 已被修改,因此这是不可能的。

更改所有权与授予特权不同,因此您引用的文档并未涵盖这一点。

PostgreSQL 文档指出:

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

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

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

因此,使这种所有权更改起作用的一种方法是(暂时)使一个用户成为另一个用户的成员:

GRANT etl TO paul;

现在,如果您是paul,那么您同时也是其中的成员etl,并且您将被允许运行该语句。


推荐阅读