Коли привілеї доступу перераховані \ 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 (вони можуть бути відкликані - см Чому новий користувач може вибрати з будь-якої таблиці? )?