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

Tho*_*mas 12 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 testuser;
Run Code Online (Sandbox Code Playgroud)

testuser现在可以访问数据库中的所有表,但是如果我尝试运行SELECT*FROM testview,我会收到以下错误:关系testview的权限被拒绝.

怎么了?testuser如何访问testview?

Pau*_*rth 18

我同意它应该有效.权限GRANT ... ON ALL TABLES应该包括视图.

授予权限是否创建了视图testuser?如果是,那么它没有与其他表相同的权限.这是因为GRANT ... ON ALL TABLES"在当前存在的所有表上".要包含您将来创建的表/视图,您可以说:

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO testuser;
Run Code Online (Sandbox Code Playgroud)

或者如果你想给予更多SELECT,你可以说ALL PRIVILEGES.

我认为这种行为ON ALL TABLES是关于Postgres权限的最容易被误解的内容之一,并且它在标准文档中并没有真正被提及,所以我试着在我自己的Postgres权限概述中强调它.

  • 感谢您澄清这一点,它应该作为错误报告,或者至少正确记录。 (3认同)

小智 5

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;
Run Code Online (Sandbox Code Playgroud)