Kiedy uprawnienia dostępu są wymienione przez \ l, a kiedy nie? Uprawnienia dostępu wymienione przez \ l można zmienić po przyznaniu i unieważnić:
$ 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
Dlaczego? Jaki stan się zmienił? Wierzę, że zdolność użytkownika my_readonly do połączenia nie uległa zmianie przez całą sesję psql (ponieważ domyślam się, że rola PUBLIC ma uprawnienia do łączenia), ale najwyraźniej coś się zmieniło: co to jest?
Pytanie boczny: jak mogę zapytać wprost, czy postgres PUBLIC w rzeczywistości nie mają połączyć przywileje (mogą one zostały odwołane - zobacz Dlaczego nowy użytkownik może wybrać z każdej tabeli? )?