Answers:
关键字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