授予对postgresql中视图的访问权限

授予对postgresql中视图的访问权限,postgresql,Postgresql,我在postgresql中有一个名为testview的视图 我创建了一个名为testuser的新用户 我希望testuser拥有数据库中所有表和视图的所有权限 为此,我运行了以下命令: GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser; GRANT USAGE ON SCHEMA public TO testuser; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO testu

我在postgresql中有一个名为testview的视图

我创建了一个名为testuser的新用户

我希望testuser拥有数据库中所有表和视图的所有权限

为此,我运行了以下命令:

GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;

GRANT USAGE ON SCHEMA public TO testuser;

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO testuser;
testuser现在可以访问数据库中的所有表,但如果我尝试从testview运行SELECT*,则会出现以下错误:关系testview的权限被拒绝


怎么了?testuser如何访问testview?

我同意它应该可以工作。使用权限
授予。。。在所有表上
也应包含视图

您是否在向
testuser
授予权限后创建了视图?如果是这样,那么它就没有与其他表相同的权限。那是因为,
GRANT。。。在所有表格上
表示“在当前存在的所有表格上”。要包含将来创建的表/视图,可以说:

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO testuser;
或者,如果您想提供的权限超过
选择
,您可以改为说
所有权限


我认为所有表上
的这种行为是关于Postgres权限最容易被误解的地方之一,标准文档中并没有真正提到它,所以我试图在我自己的文档中强调它。

感谢您澄清这一点,它应该被报告为一个bug,或者至少应该被正确地记录。嗨,Gerard。我已经更改了格式,将其显示为代码,但还不清楚是否所有内容都应为代码,因此如果您仔细阅读并使用适当的格式更新您的答案,这将很有帮助。有一个你可以使用的方法。谢谢
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
postgres=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO testuser;

GRANT USAGE on schema:          GRANT USAGE ON SCHEMA schema_name TO username;
  Grant SELECT for a specific table: GRANT SELECT ON tbl_loans_new TO oloffm;
  Grant SELECT for multiple tables:  GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO username;