답변:
키워드 PUBLIC은 나중에 작성 될 수있는 역할을 포함하여 모든 역할에 권한이 부여됨을 나타냅니다. 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