postgresql 示例化视图的附加权限

bvjxkvbb  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(80)

我有一个情况,我管理用户和ETL管道用户。管理员是超级用户,运行所有架构迁移,默认情况下是所有对象的所有者。我创建了一个实体化视图,我想使用管道用户刷新。所以我需要使管道用户成为实体化视图的所有者。我运行了类似以下SQL的操作:

CREATE ROLE materialized_view_owner WITH NOLOGIN;
ALTER MATERIALIZED VIEW scheme.pivot_view OWNER TO materialized_view_owner;
GRANT materialized_view_owner TO pipeline;

字符串
刷新失败,我得到以下错误:permission denied for table used_in_view。用户具有运行视图查询所需的权限。即使使用作为超级用户的admin(在将materialized_view_owner授予admin之后),也会以同样的方式失败。
如果我将运行视图的底层查询所需的所有权限授予materialized_view_owner,它就可以工作。因此,就好像忽略了实际用户/角色的权限,只应用materialized_view_owner权限。我的理解是,权限应该是附加的。
这是怎么回事?
注:视图使用交叉表(来自tablefunc扩展)这是在Postgres 13.9中。

6gpjuf90

6gpjuf901#

在视图中使用的表、函数和其他对象上的标记是针对视图的所有者而不是使用视图的用户进行检查的。请参见the documentation
默认情况下,对视图中引用的基础基关系的访问由视图所有者的权限决定。在某些情况下,这可用于提供对基础表的安全但受限制的访问。但是,并非所有视图都可以安全地防止篡改;有关详细信息,请参阅Section 41.5

相关问题