Когда права доступа перечислены в списке \ l, а когда нет? Права доступа, указанные \ l, могут измениться после предоставления и отзыва:
$ createuser -EP my_readonly
$ psql development
development=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------------------------+----------+----------+-------------+-------------+-----------------------
development | vagrant | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 |
...
development=# grant usage on schema public to my_readonly;
development=# grant connect on database development to my_readonly;
development=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------------------------+----------+----------+-------------+-------------+----------------------------
development | vagrant | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant +
| | | | | vagrant=CTc/vagrant +
| | | | | my_readonly=c/vagrant
...
development=# revoke connect on database development from my_readonly;
REVOKE
development=# revoke usage on schema public from my_readonly;
REVOKE
development=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------------------------+----------+----------+-------------+-------------+-----------------------
development | vagrant | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant +
| | | | | vagrant=CTc/vagrant
Это почему? Какое состояние изменилось? Я полагаю, что способность пользователя my_readonly к подключению не изменилась в течение всего сеанса psql (поскольку я предполагаю, что роль PUBLIC имеет привилегии подключения), но однозначно что-то изменилось: что это за штука?
Боковой вопрос: как я могу явно задать Postgres ли PUBLIC на самом деле это имеет привилегии CONNECT (они могут быть отозваны - см Почему новый пользователь может выбрать из любой таблицы? )?