访问 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 文件的最佳实践

有没有办法以所需的格式加入这两个表?

访问所需的关键参考

AWS Step Function Redshift 身份验证

从 Electron 中所需的 JS 模块访问父变量

[INS-30131]执行安装程序验证所需的初始设置失败(无法访问临时位置)解决方法!