我在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有类似的东西吗?
我无法使用Materialized View,因为数据集太大。
Spectrum(外部表(权限有点棘手。
只能在架构级别上对外部表执行"授予"one_answers"撤消"使用。
对于使用on schema语法的数据库用户和用户组,只能GRANT或REVOKE对外部架构的USAGE权限。
如果要在外部表的顶部创建视图,则需要授予对外部架构的使用权限。并且不需要设置CCD_ 2也是不可能的。
ERROR: Operation not supported on external tables
在您的情况下,您只需授予该用户对外部架构的使用权限。
GRANT usage on my_external_schema to my_user;
然后授予视图的权限。
GRANT Select on test_view to my_user;