请解释PostgreSQL中\z
命令的输出.我理解许可,我阅读了文档,但不知何故,我错过了\z
的输出解释.
datastore_default=> \z
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------------+-------+-----------------------------------+--------------------------
public | _table_metadata | view | ckan_default=arwdDxt/ckan_default+|
| | | datastore_default=r/ckan_default +|
| | | readonlyuser=r/ckan_default +|
public | foo | table | ckan_default=arwdDxt/ckan_default+|
| | | datastore_default=r/ckan_default +|
| | | readonlyuser=r/ckan_default +|
不知何故,readonlyuser
似乎能读懂foo
表和u foo表,但实际上却不行.两个命令都返回一个错误:
sudo -u postgres psql -d datastore_default -U readonlyuser -c 'SELECT * FROM foo'
sudo -u postgres psql -d datastore_default -U readonlyuser -c 'SELECT * FROM public.foo'
ERROR: permission denied for schema public
LINE 1: SELECT * FROM public.foo
编辑:显然,我对数据库和模式权限如何工作的理解很差.首先,只有数据库管理员(用户postgres)或数据库所有者(在我的例子中是用户ckan_default)可以向其他用户授予特定数据库的权限.该模式仅在数据库级别,所以我添加了查看公共模式的权限是可以的,它无论如何都不能从其他数据库中 Select .