You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redshift Serverless Zero-ETL物化视图权限异常问题求助

问题:Redshift Serverless自动刷新物化视图权限异常,BI用户无基表权限时查询报错

场景描述

通过Zero-ETL将DynamoDB数据同步到Redshift Serverless,创建自动刷新的物化视图供BI仪表板使用,仅希望BI用户拥有该物化视图的访问权限。执行以下SQL创建物化视图并授权:

CREATE MATERIALIZED VIEW messages AUTO REFRESH YES AS
    SELECT  
        value.sender."S"::VARCHAR(10) AS sender, 
        value.source."S"::VARCHAR(10) AS source, 
        value.message."S"::VARCHAR(10) AS message, 
        timestamp 'epoch' + timestamp * interval '1 second' AS datetime 
    FROM "ddb_message"."public"."ddb-message";
    
GRANT SELECT ON TABLE messages TO bi_user;

根据AWS官方文档说明,访问物化视图无需拥有底层基表的SELECT权限,但bi_user查询物化视图时持续报错:

SQL Error [XX000]: ERROR: Relation ddb-message does not exist in the database.

仅当额外给bi_user授予基表的SELECT权限时才能正常查询,需明确问题原因及取消基表授权的解决方法。


问题原因

官方文档中“无需基表SELECT权限”的描述仅适用于基于普通内部表的物化视图。而Zero-ETL同步的DynamoDB表属于特殊的外部关联表,Redshift Serverless在处理这类基表的物化视图查询时,会默认验证用户对基表的访问权限(即使物化视图已存储快照数据),导致无基表权限的用户查询失败。


解决方法

方法1:授予基表USAGE权限(而非SELECT)

无需给BI用户开放基表的查询权限,仅授予基表及对应schema的USAGE权限即可:

-- 授予schema的USAGE权限
GRANT USAGE ON SCHEMA "ddb_message"."public" TO bi_user;
-- 授予基表的USAGE权限
GRANT USAGE ON TABLE "ddb_message"."public"."ddb-message" TO bi_user;
-- 取消之前授予的基表SELECT权限(如果已授予)
REVOKE SELECT ON TABLE "ddb_message"."public"."ddb-message" FROM bi_user;

USAGE权限仅允许用户访问对象的元数据,无法直接查询基表数据,满足权限最小化需求。

方法2:使用SECURITY DEFINER创建物化视图

创建物化视图时添加WITH SECURITY DEFINER参数,使物化视图以创建者的身份执行查询。创建者需拥有基表的SELECT权限,后续BI用户仅需物化视图的SELECT权限即可:

-- 重新创建带SECURITY DEFINER的物化视图
CREATE MATERIALIZED VIEW messages AUTO REFRESH YES WITH SECURITY DEFINER AS
    SELECT  
        value.sender."S"::VARCHAR(10) AS sender, 
        value.source."S"::VARCHAR(10) AS source, 
        value.message."S"::VARCHAR(10) AS message, 
        timestamp 'epoch' + timestamp * interval '1 second' AS datetime 
    FROM "ddb_message"."public"."ddb-message";

-- 确保BI用户仅拥有物化视图的SELECT权限
GRANT SELECT ON TABLE messages TO bi_user;
-- 取消基表的SELECT权限(如果已授予)
REVOKE SELECT ON TABLE "ddb_message"."public"."ddb-message" FROM bi_user;

注意:使用SECURITY DEFINER时需确保创建者的权限仅包含必要的基表访问权限,避免权限泄露风险。


内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:06:11