Dies ist zwar wahr, aber nicht das ganze Bild. Public fungiert auch als implizite Rolle, zu der andere Rollen gehören und die über eigene Berechtigungen verfügt, die nicht immer wiedergegeben und gemeldet werden und vererbt werden.
Standardmäßig wird die Erstellungsberechtigung für das öffentliche Schema erteilt. Wenn Sie dies nicht entfernen, führen alle anderen korrekten Schritte zum Erstellen eines schreibgeschützten Benutzers dazu, dass dieser Benutzer auch neue Objekte im öffentlichen Schema erstellen und dann aufgrund des Eigentums Daten in diese einfügen kann. Um dies zu verhindern
REVOKE ALL ON SCHEMA public FROM PUBLIC;
In ähnlicher Weise gibt es auch die Berechtigung auf Datenbankebene, die Verwendung zu entfernen
REVOKE ALL ON DATABASE all_database FROM PUBLIC;
Guter Artikel hier: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf