Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 更改红移表上的所有权将抛出“;“必须是超级用户才能更改所有者”;_Amazon Web Services_Amazon Redshift_Privileges - Fatal编程技术网

Amazon web services 更改红移表上的所有权将抛出“;“必须是超级用户才能更改所有者”;

Amazon web services 更改红移表上的所有权将抛出“;“必须是超级用户才能更改所有者”;,amazon-web-services,amazon-redshift,privileges,Amazon Web Services,Amazon Redshift,Privileges,我对一些简单的红移命令有问题 我面临的问题是改变桌子的所有权,这里有更多的细节 在我们的红移集群中,在我们拥有的一个数据库中,作为管理员用户,我创建了一个架构和组,向其中添加了2个用户: create schema materialized_views_staging; create group mv_owners with user paul, ana; 其中,paul和ana是我们的数据分析师用来访问红移集群的两个用户 然后,我将架构上的权限更新为: grant usage on sche

我对一些简单的红移命令有问题

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

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

create schema materialized_views_staging;
create group mv_owners with user paul, ana;
其中,
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可以在运行时将数据插入表中

此时,
paul
hj_insights
表的所有者。根据,对象的所有者(或超级用户)可以查询、修改或授予对象的权限。但是,当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。根据评论,亚马逊红移被修改,因此无法实现。

更改所有权不同于授予特权,因此您引用的文档不包括这一点

国家:

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

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

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

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

GRANT etl TO paul;

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

此答案适用于PostgreSQL。根据评论,亚马逊红移被修改,因此无法实现。

更改所有权不同于授予特权,因此您引用的文档不包括这一点

国家:

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

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

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

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

GRANT etl TO paul;

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

嘿,谢谢。因此,
etl
实际上是
mv_所有者
团队的一部分,我不喜欢上面没有说明这一点。我只是快速检查了一下以确认这一点,但仍然收到相同的错误。您一定误解了我的意思:您必须同时是
etl
paul
(或他们的成员)才能更改所有权。这与
etl
paul
属于哪一组无关。对不起,我没有跟上。如果
etl
paul
是两个使用密码连接到集群的用户,我怎么可能同时是
etl
paul
呢?我知道这很混乱。我扩展了答案,希望能让事情变得更清楚。谢谢劳伦兹,现在它更清楚了,我可以理解你的想法。不幸的是,您提供的命令在红移
[42601][500310][Amazon](500310)上不起作用无效操作:在“etl”处或附近出现语法错误
嘿,谢谢。因此,
etl
实际上是
mv_所有者
团队的一部分,我不喜欢上面没有说明这一点。我只是快速检查了一下以确认这一点,但仍然收到相同的错误。您一定误解了我的意思:您必须同时是
etl
paul
(或他们的成员)才能更改所有权。这与
etl
paul
属于哪一组无关。对不起,我没有跟上。如果
etl
paul
是两个使用密码连接到集群的用户,我怎么可能同时是
etl
paul
呢?我知道这很混乱。我扩展了答案,希望能让事情变得更清楚。谢谢劳伦兹,现在它更清楚了,我可以理解你的想法。不幸的是,您提供的命令在红移
[42601][500310][Amazon](500310)上无效操作:在“etl”处或附近出现语法错误