Risposte:
La parola chiave PUBLIC indica che i privilegi devono essere concessi a tutti i ruoli, inclusi quelli che potrebbero essere creati in seguito. PUBLIC può essere pensato come un gruppo implicitamente definito che include sempre tutti i ruoli. Ogni ruolo particolare avrà la somma di privilegi concessi direttamente ad esso, privilegi concessi a qualsiasi ruolo di cui è attualmente membro e privilegi concessi a PUBLIC.
Mentre questo è vero, non è il quadro completo. Il pubblico agisce anche come un ruolo implicito a cui appartengono altri ruoli e che ha le proprie autorizzazioni non sempre riflesse e segnalate che vengono ereditate.
Per impostazione predefinita, dà l'autorizzazione di creazione allo schema pubblico. quando non si rimuovono tutti gli altri passaggi corretti per creare un utente di sola lettura, si ottiene che quell'utente è anche in grado di creare nuovi oggetti nello schema pubblico e quindi a causa della proprietà inserire i dati in essi. Per evitare questo
REVOKE ALL ON SCHEMA public FROM PUBLIC;
Allo stesso modo dà anche l'autorizzazione a livello di database, per rimuovere l'uso
REVOKE ALL ON DATABASE all_database FROM PUBLIC;
Buon articolo qui: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf