【问题标题】:Grant only access to View in Redshift Spectrum仅授予对 Redshift Spectrum 中的 View 的访问权限
【发布时间】:2021-03-07 02:52:11
【问题描述】:

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

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

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

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-services amazon-redshift aws-glue-data-catalog amazon-redshift-spectrum


    【解决方案1】:

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

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

    您只能 GRANTREVOKE 将外部架构的 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;
    

    【讨论】:

    • 但这并不能解决问题,我知道我必须授予架构上的使用权限,但这是我不想要的。此外,用户将对该表内的所有表进行选择。也许这个问题没有得到很好的解释......
    • 在该表内的所有表上选择 - 你是说在外部架构内吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多