PostgreSQL - 谁或什么是“PUBLIC”角色?

Gug*_*upf 13 postgresql role metadata

information_schema.role_table_grants当我publicgrantee专栏中看到时我正在看,然后我检查了information_schema.enabled_roles但是这个role_name不存在。

=> 谁或什么public角色?

a_h*_*ame 12

直接从手册:

关键字 PUBLIC 表示将权限授予所有角色,包括可能在以后创建的角色。PUBLIC 可以被认为是一个隐式定义的组,它始终包含所有角色。任何特定角色都将拥有直接授予它的特权、授予其当前成员的任何角色的特权以及授予 PUBLIC 的特权的总和。


小智 12

虽然这是真的,但并非全貌。Public 还充当其他角色所属的隐式角色,并且具有自己的权限,但并不总是反映和报告被继承的权限。

默认情况下,它授予对公共架构的创建权限。当您不删除此所有其他正确步骤时,创建只读用户会导致该用户也能够在公共架构中创建新对象,然后由于所有权将数据放入其中。为了防止这种情况

REVOKE ALL ON SCHEMA public FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)

同样,它还授予数据库级别的权限,以删除使用

REVOKE ALL ON DATABASE all_database FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)

这里的好文章:https : //wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf