PostgreSQL - Qui ou quel est le rôle «PUBLIC»?

11

Je regardais information_schema.role_table_grantsquand j'ai vu publicdans la granteecolonne, puis j'ai vérifié information_schema.enabled_rolesmais cela role_namen'existe pas.

=> Qui ou quel est le publicrôle?

Gugelhupf
la source

Réponses:

9

Dès 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 directement accordés, des privilèges accordés à tout rôle dont il est actuellement membre et des privilèges accordés à PUBLIC.

un cheval sans nom
la source
7

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

Ruan Malan N
la source