首页 > 解决方案 > 仅授予对 Redshift Spectrum 中的 View 的访问权限

问题描述

我在 Redshift Spectrum 上的外部表上创建了一个简单视图:

CREATE VIEW test_view AS (
 SELECT * 
 FROM my_external_schema.my_table
 WHERE my_field='x'
) WITH NO SCHEMA BINDING;

阅读文档,我发现除非我授予对底层架构和表的访问权限,否则无法授予对视图的访问权限。因此,如果我执行以下语句:

GRANT SELECT ON test_view to my_user;

我尝试在视图中查看数据,正如预期的那样,我得到了错误:

架构 my_external_schema 的权限被拒绝

为了解决这个问题,我可以这样做GRANT USAGE ON SCHEMA my_external_schema TO my_user,但这会在该架构内的所有表上提供 SELECT ,这是我试图避免的。

有没有办法避免这种情况?

使用普通的 Redshift 表,对模式的授权使用就足够了,因为权限不授予对基础表的选择,Spectrum 有类似的东西吗?

我不能使用物化视图,因为数据集太大。

标签: amazon-web-servicesamazon-redshiftaws-glue-data-catalogamazon-redshift-spectrum

解决方案


Spectrum(外部表)权限有点棘手。

您只能在架构级别对外部表执行授予和撤销使用。

您只能将外部模式的USAGE权限授予或撤销给使用ON SCHEMA 语法的数据库用户和用户组。

如果要在外部表上创建视图,则需要授予外部模式的使用权限。而且不需要设置SELECT ON EXTERNAL TABLE也是不可能的。

ERROR:  Operation not supported on external tables

在您的情况下,您只需授予该用户对外部架构的使用权限。

GRANT usage on my_external_schema to my_user;

然后授予该视图的权限。

GRANT Select on test_view to my_user;

推荐阅读