Respuestas:
La palabra clave PUBLIC indica que los privilegios se otorgarán a todos los roles, incluidos los que se puedan crear más adelante. PUBLIC puede considerarse como un grupo definido implícitamente que siempre incluye todos los roles. Cualquier rol en particular tendrá la suma de privilegios otorgados directamente, privilegios otorgados a cualquier rol del que actualmente sea miembro y privilegios otorgados a PUBLIC.
Si bien esto es cierto, no es la imagen completa. Público también actúa como un rol implícito al que pertenecen otros roles y que tiene sus propios permisos que no siempre se reflejan e informan que se heredan.
Por defecto, da permiso de creación en el esquema público. cuando no elimina esto, todos los demás pasos correctos para crear un usuario de solo lectura dan como resultado que ese usuario también pueda crear nuevos objetos en el esquema público y luego, debido a la propiedad, coloque datos en ellos. Para prevenir esto
REVOKE ALL ON SCHEMA public FROM PUBLIC;
Del mismo modo, también da permiso a nivel de base de datos, para eliminar el uso
REVOKE ALL ON DATABASE all_database FROM PUBLIC;
Buen artículo aquí: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf