amazon-web-services - 更改 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 可以在表运行时将数据插入到表中。
此时paul
是hj_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;
这与文档中的说明相反。
你能在我的过程中发现任何不正确的地方吗?我很确定我已经设置了所有必要的权限。
谢谢!
解决方案
这个答案适用于 PostgreSQL。根据评论,Amazon Redshift 已被修改,因此这是不可能的。
更改所有权与授予特权不同,因此您引用的文档并未涵盖这一点。
您必须拥有该表才能使用
ALTER TABLE
。[...] 要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色必须CREATE
对表的模式具有特权。
因此,您必须同时是paul
(或 的成员paul
)和 etl
(或 的成员etl
)才能执行命令。超级用户当然可以随时更改所有权。
最后一句话一定有点混乱,所以让我解释一下。在 PostgreSQL 中,用户和组之间没有区别,两者都是“角色”。因此,就像您可以成为组的成员一样,您也可以成为用户的成员。
因此,使这种所有权更改起作用的一种方法是(暂时)使一个用户成为另一个用户的成员:
GRANT etl TO paul;
现在,如果您是paul
,那么您同时也是其中的成员etl
,并且您将被允许运行该语句。
推荐阅读
- architecture - 什么样的文档是架构文档?
- javascript - Vue JS - 使用 v-for 播放/暂停的视频处理
- git - 你可以对 Git Fetch 应用过滤器吗?
- delphi - TOpenPictureDialog 和 png_old 扩展
- kotlin - 将数据转换器用于使用 Room 的接口
- spring - 在 Spring Cloud 数据流后端为 RabbitMQ 队列和交换添加前缀
- c# - 关于在 Solidworks 中使用宏编辑配合的问题
- asp.net-core - 如何在 ASP.NET Core 中创建资源文件
- visual-studio-code - 如何确保每次打开 VSCode 时始终在输出窗格中显示来自同一源(例如 Prettier)的输出?
- pytorch - 当我从 PyTorch 中的 DataLoader 调用预处理函数时出现 CUDA 错误