Respostas:
A palavra-chave PUBLIC indica que os privilégios devem ser concedidos a todas as funções, incluindo aquelas que podem ser criadas posteriormente. PUBLIC pode ser pensado como um grupo implicitamente definido que sempre inclui todas as funções. Qualquer função em particular terá a soma dos privilégios concedidos diretamente a ela, privilégios concedidos a qualquer função da qual atualmente seja membro e privilégios concedidos à PUBLIC.
Embora isso seja verdade, não é o quadro completo. O público também atua como uma função implícita à qual outras funções pertencem e que tem suas próprias permissões nem sempre refletidas e relatadas que são herdadas.
Por padrão, ele fornece permissão de criação no esquema público. quando você não remove isso, todas as outras etapas corretas para criar um usuário somente leitura resultam em que o usuário também pode criar novos objetos no esquema público e, devido à propriedade, colocar dados neles. Para evitar isso
REVOKE ALL ON SCHEMA public FROM PUBLIC;
Da mesma forma, também fornece permissão no nível do banco de dados, para remover o uso
REVOKE ALL ON DATABASE all_database FROM PUBLIC;
Bom artigo aqui: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf