Antworten:
Das Schlüsselwort PUBLIC gibt an, dass die Berechtigungen allen Rollen gewährt werden sollen, einschließlich derjenigen, die möglicherweise später erstellt werden. PUBLIC kann als implizit definierte Gruppe betrachtet werden, die immer alle Rollen umfasst. Für eine bestimmte Rolle wird die Summe der direkt gewährten Berechtigungen, der Berechtigungen für jede Rolle, der sie derzeit angehört, und der PUBLIC gewährten Berechtigungen gewährt.
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