PostgreSQL - Кто или что играет роль «PUBLIC»?

11

Я смотрел, information_schema.role_table_grantsкогда я увидел publicв granteeстолбце, затем я проверил, information_schema.enabled_rolesно это role_nameне существует.

=> Кто или какова publicроль?

Gugelhupf
источник

Ответы:

9

Прямо из руководства:

Ключевое слово PUBLIC указывает, что привилегии должны быть предоставлены всем ролям, включая те, которые могут быть созданы позже. PUBLIC может рассматриваться как неявно определенная группа, которая всегда включает в себя все роли. Любая конкретная роль будет иметь сумму привилегий, предоставленных непосредственно ей, привилегий, предоставленных любой роли, членом которой она в настоящее время является, и привилегий, предоставленных PUBLIC.

a_horse_with_no_name
источник
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

Руан Малан Н
источник