【发布时间】:2014-10-30 17:04:57
【问题描述】:
请解释 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查看公共架构的权限是可以的,无论如何它无法从其他数据库中选择。
【问题讨论】:
-
我在我的答案中添加了一些关于阅读 ACL 的详细信息。
标签: postgresql