访问 Redshift External 表所需的最低权限
Posted
技术标签:
【中文标题】访问 Redshift External 表所需的最低权限【英文标题】:Minimum permission required to access Redshift External table 【发布时间】:2020-03-03 15:02:42 【问题描述】:根据 AWS 文档,
要运行 Redshift Spectrum 查询,您需要以下权限:
架构的使用权限
在当前数据库中创建临时表的权限
我有一个外部数据库、架构和在该架构中创建的表。 我创建了一个新的 Redshift 用户,我授予该用户对外部架构的“使用”权限:
grant usage on external_schema to new_user;
但我没有将 external_database 上的“临时”权限提供给我的 new_user。
此外,没有默认权限,因为我使用主用户检查了 PG_DEFAULT_ACL 并且其中没有行。
谁能告诉我为什么我可以查询外部表?
【问题讨论】:
我认为这是说他们需要“当前数据库”的权限,这意味着 Redshift(不是外部数据库)。 不,我不是这样......它是频谱数据库,其中元数据将被存储,因为他们网站上的这个示例授权声明建议:“在数据库频谱数据库上授予 temp 以组频谱用户;”。即使在你的情况下,'temp' 权限是否应该出现在 pg_default_Acl 结果中? 【参考方案1】:在 Amazon Redshift 中,数据库和架构是不同的概念。用户对象(Redshift 和外部)在 Schema 中创建,TEMP 对象在“temp”模式中创建并且在数据库级别可用。
在某些情况下,在应用 Spectrum 表和 Redshift 表之间的连接时,Redshift 需要创建临时表,这就是文档中提到它以避免用户出现任何故障/错误的原因。
documentation 是这样说的:
授予在指定数据库中创建临时表的权限。要运行 Amazon Redshift Spectrum 查询,数据库用户必须有权在数据库中创建临时表。
注意 默认情况下,用户通过其在 PUBLIC 组中的自动成员资格被授予创建临时表的权限。要删除任何用户创建临时表的权限,请撤消 PUBLIC 组的 TEMP 权限。然后将创建临时表的权限显式授予特定用户或用户组。
【讨论】:
以上是关于访问 Redshift External 表所需的最低权限的主要内容,如果未能解决你的问题,请参考以下文章
通过任何人的 COPY 操作使 Redshift 可以访问 S3 文件的最佳实践