如何在POSTGRESQL中给用户授予物化视图的刷新权限?

问题描述 投票:0回答:4

我正在Linux上通过运行脚本执行sql文件。

我可以看到我的查询执行得很好,但我有以下查询来刷新我的 testData.sql 文件中的视图,这给了我错误

refresh MATERIALIZED VIEW view_test

错误

psql:/home/test/sql/testData.sql:111: ERROR:  must be owner of relation view_test

我已申请以下权限

grant select,update,delete,insert on view_test to "user123";

如何向POSTGRESQL中的视图授予刷新权限?

postgresql view refresh
4个回答
13
投票

您应该创建一个新角色来拥有该视图,然后将该角色授予任何需要刷新视图权限的用户。这可确保您在需要创建其他用户凭据时可以轻松分配权限。

CREATE ROLE refresh_materialized_views;
GRANT SELECT, INSERT, UPDATE, DELETE ON view_test TO refresh_materialized_views;
GRANT refresh_materialized_views TO user123;
GRANT refresh_materialized_views TO current_owner_of_view_test;
ALTER TABLE view_test OWNER TO refresh_materialized_views;

一个诱人的答案是将视图的所有者更改为 user123,但这很危险 - 您会破坏当前所有者对其视图的访问权限。


4
投票

我将创建一个新角色并将其设置为物化视图的新所有者。然后将该角色添加到您希望能够刷新的任何用户。这样,经过身份验证的数据库用户不是所有者,您可以轻松添加/删除具有权限的用户。


1
投票

错误

PostgreSQL
要求我们必须是所有者才能刷新
view_test
。您可以使用
alter table view_test owner to 'user123'
命令将此物化视图的所有者更改为
user123


0
投票

Postgres 17 引入了 MAINTAIN 权限,允许您刷新物化视图。

GRANT MAINTAIN ON materiview FOR user;

https://www.postgresql.org/docs/17/ddl-priv.html

© www.soinside.com 2019 - 2024. All rights reserved.