从postgres中的视图读取时出现用户权限错误



我正在使用postgres,并且有一个新的只读用户,该用户对基本架构中的所有表都具有读取权限。我试图从基本模式中SELECT特定视图中的一些数据,并能够从视图中看到值。为了测试数据计数,我不得不对视图定义进行一些更改,而在Postgres中,没有办法更改视图,所以我不得不使用具有更高权限的老用户来droprecreate具有新定义的视图。现在,我在View上运行相同的SELECT查询,并得到一个权限错误。

ERROR:  permission denied for view 
SQL state: 42501

我再次尝试了Grant SELECT on ALL TABLES on Schema base to user,并且能够从视图中看到这些值。我没有得到的是,自从第一个GRANT以来,我没有更改任何语法,为什么我必须再次运行GRANT SELECT语句,以便新用户能够访问视图?用户不应该已经能够默认访问所有的表和视图吗

如果不更改视图的列,则可以使用CREATE OR REPLACE VIEW更改视图定义。

在PostgreSQL中,权限存储在对象上。如果你放下一个对象,它的所有权限都会消失。如果以后创建具有相同名称的对象,则该对象仍然是不同的对象,并且将具有默认权限。

可以使用ALTER DEFAULT PRIVILEGES为将来创建的对象授予权限。

最新更新