请解释\z
PostgreSQL中命令的输出.我理解了许可,我阅读了文档,但不知怎的,我错过了输出的解释\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 +|
Run Code Online (Sandbox Code Playgroud)
不知何故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
Run Code Online (Sandbox Code Playgroud)
编辑:显然我对数据库和架构权限的工作方式了解不足.首先,只有db admin(用户postgres)或数据库的所有者(在我的情况下,用户ckan_default)可以授予其他用户对特定数据库的权限.架构仅在数据库级别,因此我可以添加readonlyuser
查看公共架构的权限,但无论如何都无法从其他数据库中进行选择.
Eel*_*lke 28
该错误表示对模式公众的权限被拒绝(强调我的)
您需要在schema public上授予readonlyuser权限:
GRANT USAGE ON SCHEMA public TO readonlyuser;
Run Code Online (Sandbox Code Playgroud)
ACL的内容在此页面上说明.这里引用最相关的部分:
rolename = xxxx - 授予role = xxxx的权限 - 授予PUBLIC的权限
Run Code Online (Sandbox Code Playgroud)r -- SELECT ("read") w -- UPDATE ("write") a -- INSERT ("append") d -- DELETE D -- TRUNCATE x -- REFERENCES t -- TRIGGER X -- EXECUTE U -- USAGE C -- CREATE c -- CONNECT T -- TEMPORARY arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects) * -- grant option for preceding privilege /yyyy -- role that granted this privilege
+是psql格式化结果的方式的一部分,它们不是值的一部分.
归档时间: |
|
查看次数: |
24396 次 |
最近记录: |