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

时间:2016-12-26 19:20:06

标签: 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;

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

有什么问题? testuser如何访问testview?

2 个答案:

答案 0 :(得分:11)

我同意它应该有用。权限GRANT ... ON ALL TABLES也应包含视图。

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

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO testuser;

或者,如果您想提供的时间超过SELECT,则可以改为ALL PRIVILEGES

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

答案 1 :(得分:3)

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;