gpt4 book ai didi

PostgreSQL 权限解释

转载 作者:行者123 更新时间:2023-11-29 11:13:35 27 4
gpt4 key购买 nike

请解释 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)模式的权限就可以了,它无论如何都不能从其他数据库中选择。

最佳答案

错误提示 schema public 权限被拒绝(强调我的)

您需要在 public 模式上授予只读用户权限:

GRANT USAGE ON SCHEMA public TO readonlyuser;

ACL 的内容在 this page 上有解释。 .此处引用的最相关部分:

rolename=xxxx -- privileges granted to a role
=xxxx -- privileges granted to PUBLIC

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 格式化结果的方式的一部分,它们不是值的一部分。

关于PostgreSQL 权限解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25691037/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com