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


11

我正在查看在专栏中information_schema.role_table_grants看到public的内容grantee,然后进行了检查,information_schema.enabled_roles但这role_name不存在。

=>谁或什么public角色?

Answers:


9

直接来自手册:

关键字PUBLIC表示将特权授予所有角色,包括以后可能创建的角色。可以将PUBLIC视为始终包含所有角色的隐式定义的组。任何特定角色将具有直接授予它的特权,授予它当前所属的任何角色的特权以及授予PUBLIC的特权的总和。


7

虽然这是事实,但不是全部。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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.