Quando sono elencati i privilegi di accesso per \ l e quando non lo sono? I privilegi di accesso elencati da \ l possono cambiare dopo una concessione e revocare:
$ 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
Perché? Quale stato è cambiato? Credo che la capacità dell'utente di my_readonly di connettersi sia rimasta invariata durante l'intera sessione psql (perché suppongo che il ruolo PUBBLICO abbia i privilegi di connessione), ma chiaramente qualcosa è cambiato: cos'è quella cosa?
Domanda laterale: come posso chiedere esplicitamente Postgres siano essi pubblici, infatti, non ha i privilegi di connessione (essi possono essere stati revocati - vedi Perché può un nuovo utente selezionare da qualsiasi tabella? )?