如何授予 Redshift 中所有模式的使用权限?

Posted

技术标签:

【中文标题】如何授予 Redshift 中所有模式的使用权限?【英文标题】:How to grant usage on all schemas in Redshift? 【发布时间】:2018-09-17 22:47:05 【问题描述】:

我想创建一个只读用户,该用户应该对所有模式中的所有表具有 SELECT 访问权限。我检查了 redshift 文档,但看起来我们只能在单个 sql 语句中授予对特定模式的访问权限。 (不是所有模式一次该只读用户应该对将来创建的所有表/模式具有只读访问权限。我不知道该怎么做。

是我遗漏了什么还是 AWS 故意这样做的?如果这是一个限制,那么解决此问题的可能解决方法是什么?

【问题讨论】:

你是对的,这就是它的工作原理。它不是由 AWS 故意完成的,它是 postgres 的一个特性。您可以在 redshift 之外设置一个脚本来自动化该过程。 我明白了。谢谢您的答复。然后我会写一个 udf 来完成它。 正确 - 但不是红移 UDF。它需要在红移之外。 我明白了,但出于好奇 - 为什么它不能是红移 UDF?我正在考虑从系统表中获取所有模式并循环运行命令。 您无法访问 Redshift UDF 中的表 docs.aws.amazon.com/redshift/latest/dg/… 【参考方案1】:

您不能在 Redshift 中一次授予对多个架构的 SELECT(“只读”)权限,因为您已经发现这只能在每个架构的基础上完成。也无法设置权限,以便用户自动获得对新创建的模式的任何类型的权限,除非该用户是“超级用户”。这是大多数数据库平台的典型特征,即必须在创建架构后创建架构级别权限。

我建议您最好的选择是查看创建新模式的过程,并查看权限 GRANT 是否可以作为该过程的一部分来完成。考虑使用用户组而不是用户,这样在您需要添加或更改具有这些权限的用户时更易于管理。

例如

CREATE GROUP readonlyusers;
CREATE USER my_readonly_user WITH PASSWORD 'abc' IN GROUP readonlyusers;

-- when creating a new schema
CREATE SCHEMA IF NOT EXISTS myschema;
GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO GROUP readonlyusers;

【讨论】:

此外,如果您希望架构中所有新创建的TABLEs自动将权限设置为某些角色,您可以ALTER DEFAULT PRIVILEGES

以上是关于如何授予 Redshift 中所有模式的使用权限?的主要内容,如果未能解决你的问题,请参考以下文章

在 redshift 中查询时出现权限错误

将 Redshift 系统表的权限授予非超级用户

Redshift 间接权限

如何授予 Amazon Redshift 用户读取系统表、视图、日志等的访问权限?

ALTER SCHEMA NAME 是不是会影响对 Redshift 中架构的权限授予

限制对 Redshift 表的访问,仅授予对视图的访问权限