根据AWS文档,
要运行Redshift Spectrum查询,您需要以下权限:
对模式的使用权限
在当前数据库中创建临时表的权限
我有一个外部数据库,模式和在该模式中创建的表。我创建了一个新的Redshift用户,并向其授予了外部模式的“使用”特权:
grant usage on external_schema to new_user;
但是我没有为我的new_user提供external_database的'temp'特权。
而且,没有默认权限,因为我使用主用户检查了PG_DEFAULT_ACL,并且其中没有行。
有人可以让我知道为什么我可以查询外部表吗?
在Amazon Redshift中,数据库和架构是不同的概念。用户对象(Redshift和外部对象)是在Schema中创建的,而TEMP对象是在“ temp”模式中创建的,并且可以在数据库级别使用。
[在某些情况下,在Spectrum表和Redshift表之间应用了联接的情况下,Redshift需要创建临时表,这就是为什么在文档中提到它以避免用户出现任何故障/错误的原因。
documentation说的是:
授予在指定数据库中创建临时表的特权。要运行Amazon Redshift Spectrum查询,数据库用户必须具有在数据库中创建临时表的权限。
注意默认情况下,通过自动加入PUBLIC组来授予用户创建临时表的权限。若要删除任何用户创建临时表的特权,请从PUBLIC组中取消TEMP许可。然后显式授予特定用户或用户组创建临时表的权限。