Відповіді:
Ключове слово PUBLIC вказує на те, що пільги повинні надаватися всім ролям, включаючи ті, які можуть бути створені пізніше. PUBLIC можна розглядати як неявно визначену групу, яка завжди включає всі ролі. Будь-яка конкретна роль матиме суму привілеїв, наданих безпосередньо їй, привілеїв, наданих будь-якій ролі, в якій вона є членом, та привілеїв, наданих PUBLIC.
Хоча це правда, це не повна картина. Громадська також виконує роль неявної ролі, якій належать інші ролі, і яка має власні дозволи, не завжди відображаються та повідомляються про спадкування.
За замовчуванням він дає дозвіл на створення загальнодоступної схеми. коли ви не видаляєте це, всі інші правильні кроки для створення користувача лише для читання призводять до того, що користувач також може створювати нові об'єкти в загальнодоступній схемі, а потім завдяки власності вносити в них дані. Щоб цього не допустити
REVOKE ALL ON SCHEMA public FROM PUBLIC;
Так само він дає дозвіл на рівень бази даних для видалення використання
REVOKE ALL ON DATABASE all_database FROM PUBLIC;
Хороша стаття тут: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf