PostgreSQL表权限不允许用户创建/选择视图。

10

我正在管理一个具有多个模式的数据库,我在设置权限方面遇到了一些困难,并希望请求帮助。

我有名为schemaA和组角色db_writer的模式。

我使用以下SQL:

GRANT USAGE ON SCHEMA schemaA TO db_writer;
GRANT UPDATE, INSERT, SELECT, DELETE ON ALL TABLES IN SCHEMA schemaA TO db_writer;

然而,db_writer无法创建视图。它们会返回权限被拒绝的错误。此外,当我创建视图时,她就不能选择它们...我不得不再次为该视图设置权限。

我理解视图在特权方面与表格相同...如果一个用户已经被授予对模式中所有表的某些权限,则这也适用于视图。

我错过了什么?任何建议都会感激。

1个回答

14

问题在于USAGE不允许用户在数据库内创建对象。

尝试一下

GRANT USAGE, CREATE ON SCHEMA schemaA TO db_writer 

编辑:

新创建的对象将获得默认权限,如果您希望用户在未来创建的对象也拥有这些权限,可以执行以下操作:

ALTER DEFAULT PRIVILEGES IN SCHEMA schemaA GRANT UPDATE, INSERT, SELECT, DELETE ON TABLES TO db_writer;
ALTER DEFAULT PRIVILEGES IN SCHEMA schemaA GRANT SELECT ON TABLES TO db_reader;

查看此答案以获取更多信息


Miguel,你的回答提供了一个允许用户创建视图的解决方案。但是如果有另一个名为db_reader的用户,我想允许他从我的视图中进行“选择”操作,但不允许他创建视图。这可行吗?还是我必须授予用户“CREATE”权限才能从视图中进行选择操作? - user3770062
当然是可行的。在这种情况下,您只需授予db_reader对该模式的“USAGE”权限。 - Filipe Roxo
啊,是的 - 这就是我所做的。但是当我创建了一个新视图时,db_reader 无法访问它......直到我再次重新设置权限。在创建视图后,我必须授予他们对该视图的选择权限 - 我曾希望如果他们在模式上已经被授予使用/选择权限,则这将自动完成。 - user3770062
@user3770062 抱歉没看到你的评论。我刚刚更新了我的答案。 - Filipe Roxo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接