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

16

我正在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 中向视图授予刷新权限?


2
在这里回答了:(https://dba.stackexchange.com/q/171932) - JGH
1
@JGH,我已经使用上面提供的链接实现了解决方案,但我想知道是否有其他方法来完成相同的任务。 - stackUser
3个回答

6

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接