Amazon web services 更改红移表上的所有权将抛出“;“必须是超级用户才能更改所有者”;
我对一些简单的红移命令有问题 我面临的问题是改变桌子的所有权,这里有更多的细节 在我们的红移集群中,在我们拥有的一个数据库中,作为管理员用户,我创建了一个架构和组,向其中添加了2个用户: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
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”处或附近出现语法错误