Пожалуйста, объясните вывод команды \z
в PostgreSQL. Я понимаю разрешение, я прочитал документацию, но почему-то я пропустил интерпретацию вывода \z
.Разрешения PostgreSQL объяснены
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
Редактировать: по-видимому, у меня плохое представление о том, как работают права доступа к базе данных и схемы. Прежде всего, только администратор db (пользователь postgres) или владелец базы данных (в моем случае пользователь ckan_default) могут предоставлять другие права пользователей в конкретной базе данных. Схема находится только на уровне базы данных, поэтому вполне нормально, что я добавил readonlyuser
разрешение на просмотр общедоступной схемы, в любом случае он не может выбирать из других баз данных.
Я добавил некоторые данные о чтении ACL к моему ответу. – Eelke