我猜您想要递归地向数据库angel_research_production
中的每个关系(表和视图)授予SELECT
权限。是这样吗?
如何在数据库中为所有表授予权限
如果是这样,在PostgreSQL 9.0及以上版本中,您可以使用以下命令:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
来自
GRANT手册。注意
SCHEMA中的所有表
子句。用法:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO angel_research;
如果您自定义的所有对象都在public
模式(见下文),那么这将起作用。
在之前的版本中没有此功能,但是用户定义的函数存在解决方法。
Pg 9.0还具有ALTER DEFAULT PRIVILEGES,它更改分配给新创建的对象的默认权限。它不影响现有对象。
错误消息的含义是什么?
正如 TokenMacGuy 所指出的那样,关系是表或视图,而不是数据库。
GRANT SELECT ON angel_research_production TO angel_research;
可以简单理解为:
GRANT SELECT ON TABLE angel_research_production TO angel_research
^^^^^
并且那个表(关系)不存在,所以你会收到上述报错信息。
在
GRANT手册或
psql
\h GRANT
输出中,您将看到:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
ON DATABASE database_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
这表明你可以授予数据库的权限是
CREATE
、
CONNECT
和
TEMPORARY
,但没有
SELECT
权限。
关系?模式?嗯?
Pg中有四个组织层次: