我正在使用postgres,并且有一个新的只读用户,该用户对基本架构中的所有表都具有读取权限。我试图从基本模式中SELECT
特定视图中的一些数据,并能够从视图中看到值。为了测试数据计数,我不得不对视图定义进行一些更改,而在Postgres中,没有办法更改视图,所以我不得不使用具有更高权限的老用户来drop
和recreate
具有新定义的视图。现在,我在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
为将来创建的对象授予权限。