Quando os privilégios de acesso estão listados por \ l e quando não estão? Os privilégios de acesso listados por \ l podem mudar após uma concessão e revogar:
$ 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
Por que é que? Que estado mudou? Acredito que a capacidade do usuário my_readonly de se conectar permaneceu inalterada durante toda a sessão psql (porque acho que a função PUBLIC tem privilégios de conexão), mas claramente algo mudou: o que é isso?
Pergunta Side: como posso pedir explicitamente postgres se PÚBLICO na verdade não tem privilégios de conexão (que pode ter sido revogada - ver Por que um novo usuário selecionar a partir de qualquer tabela? )?
fonte