请解释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
和 _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)才能授予其他用户在特定数据库上的权限。模式仅限于数据库级别,因此我向readonlyuser
添加了访问public模式的权限是可以的,因为它无论如何都不能从其他数据库中进行选择。