web-dev-qa-db-fra.com

PostgreSQL - Qui ou quel est le rôle "PUBLIC"?

Je regardais information_schema.role_table_grants quand j'ai vu public dans la colonne grantee, j'ai vérifié à information_schema.enabled_roles mais ça role_name n'existe pas.

=> Qui ou quel est le rôle public?

11
Gugelhupf

directement dans le manuel:

Le mot clé PUBLIC indique que les privilèges doivent être accordés à tous les rôles, y compris ceux qui pourraient être créés ultérieurement. PUBLIC peut être considéré comme un groupe implicitement défini qui inclut toujours tous les rôles. Tout rôle particulier aura la somme des privilèges qui lui sont accordés directement, des privilèges accordés à tout rôle dont il est actuellement membre et des privilèges accordés à PUBLIC.

9

Bien que cela soit vrai, ce n'est pas l'image complète. Public agit également comme un rôle implicite auquel d'autres rôles appartiennent et qui a ses propres autorisations qui ne sont pas toujours reflétées et signalées et qui sont héritées.

Par défaut, il donne l'autorisation de créer sur le schéma public. lorsque vous ne supprimez pas toutes les autres étapes correctes pour créer un utilisateur en lecture seule, cet utilisateur peut également créer de nouveaux objets dans le schéma public et, en raison de la propriété, y mettre des données. Pour éviter cela

REVOKE ALL ON SCHEMA public FROM PUBLIC;

De même, il donne également l'autorisation au niveau de la base de données, de supprimer l'utilisation

REVOKE ALL ON DATABASE all_database FROM PUBLIC;

Bon article ici: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf

7
Ruan Malan N