Odpowiedzi:
Słowo kluczowe PUBLIC wskazuje, że uprawnienia mają zostać przyznane wszystkim rolom, w tym tym, które mogą zostać utworzone później. PUBLIC można traktować jako domyślnie zdefiniowaną grupę, która zawsze obejmuje wszystkie role. Każda konkretna rola będzie miała sumę przywilejów przyznanych bezpośrednio jej, przywilejów przyznanych każdej roli, której jest obecnie członkiem, oraz przywilejów przyznanych PUBLIC.
Chociaż jest to prawda, nie jest to pełny obraz. Publiczny działa również jako domyślna rola, do której należą inne role i który ma własne uprawnienia, które nie zawsze są odzwierciedlane i zgłaszane w przypadku dziedziczenia.
Domyślnie daje uprawnienia do tworzenia schematu publicznego. gdy nie usuniesz tego, wszystkie inne prawidłowe kroki, aby utworzyć użytkownika tylko do odczytu, powoduje, że użytkownik ten może również tworzyć nowe obiekty w schemacie publicznym, a następnie ze względu na prawo własności umieszczać w nich dane. Aby temu zapobiec
REVOKE ALL ON SCHEMA public FROM PUBLIC;
Podobnie daje również uprawnienia na poziomie bazy danych, aby usunąć użycie
REVOKE ALL ON DATABASE all_database FROM PUBLIC;
Dobry artykuł tutaj: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf