Я смотрел, information_schema.role_table_grants
когда я увидел public
в grantee
столбце, затем я проверил, information_schema.enabled_roles
но это role_name
не существует.
=> Кто или какова public
роль?
источник
Я смотрел, information_schema.role_table_grants
когда я увидел public
в grantee
столбце, затем я проверил, information_schema.enabled_roles
но это role_name
не существует.
=> Кто или какова public
роль?
Ключевое слово 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