Vous n'êtes pas identifié(e).
Bonjour,
Un utilisateur lambda peut consulter des tables systèmes et connaître les objets créés sur la base qui ne lui appartiennent pas ?
Est-il conseillé d'interdire à un utilisateur lambda l'accès au schéma pg_catalog ( qui contient les tables systèmes ) ?
et de lui associer ensuite des droits restreints sur le schéma pg_catalog afin qu'il ne consulte que les informations qui le concerne ?
Risque t-on d'avoir des effets de bord ou un comportement PostgreSQL inattendu ?
Pour info :
J'ai utilisé les commandes suivantes qui semblent marcher :
1) Interdiction l'accès au schéma pg_catalog : revoke all privileges on all tables in schema pg_catalog from public;
2) Accès restreint, par exemple :
Création d'un schéma "admin"
Dans le schéma admin j'ai créé une vue sur la table pg_roles ( ex : create view v_pg_roles as select * from pg_roles where rolname = 'utilisateur lambda';
grant usage on schema admin to 'utilisateur lambda';
grant select on v_pg_roles 'utilisateur lambda';
Merci pour vos réponse
Hors ligne
Normalement ça devrait marcher (je n'ai jamais joué à cela). PostgreSQL, pour construire ses plans, a accès au schéma système même si vous n'y avez pas accès. Par contre, en faisant cette manipulation, vous rendez psql, pgadmin, et les outils de supervision probablement inutilisable (sauf si vous donnez spécifiquement à l'utilisateur utilisé par ces outils les droits). Si vous partez dans cette direction, il va aussi falloir révoquer tous les droits sur l'information_schema…
Bref, je pense que ça va faire de la vie de vos utilisateurs un petit enfer s'ils sont habitués à l'interface normale de PostgreSQL… ils n'auront même plus accès à \d sous psql.
Un dernier point: on peut quelquefois récupérer quand même les informations qui ne sont pas affichées par une vue, à partir du moment où on a le droit d'écrire du PL. Il y a du travail en cours sur ce sujet pour la 9.2: http://archives.postgresql.org/pgsql-ha … g00014.php
C'est le thread 'fix leaky view problem' sur pgsql-hackers, si vous voulez plus de détails (il y a une trentaine de mails de mémoire).
Marc.
Hors ligne
J'ai du mal à croire que ça fonctionnerait. J'ai essayé de mon côté en interdisant l'utilisation du schéma pg_catalog et en interdisant tout sur pg_roles. L'utilisateur pouvait toujours lire cette table et accéder à ce schéma.
Guillaume.
Hors ligne
Après discussion avec Marc, il s'avère que je me suis trompé. Il fallait aussi révoquer les droits du pseudo utilisateur public.
Guillaume.
Hors ligne
En fait, j'ai deux types d'utilisateurs. Un utilisateur propriétaire des tables, fonctions, vues ... et des utilisateurs de type "d'exploitation" qui n'ont aucun droit à part celui de lancer les fonctions de l'utilisateur propriétaire ( aucun schéma ne leur est octroyé ni même le schéma public )
Je pourrais au moins restreindre les droits sur pg_catalog sur les utilisateurs de type "exploitation" ?
Hors ligne
Ça devrait marcher. Sans garantie par contre, bien sûr.
Par contre, si vous testez ça, je suis intéressé par le résultat, n'hésitez pas à poster ce que vous avez testé et les problèmes rencontrés.
Marc.
Hors ligne
1er test :
J'ai créé une fonction sous mon compte propriétaire qui consulte les tables pg_roles, pg_class, pg_attribute, pg_type ( la fonction est de type SECURITY DEFINER )
J'ai lancé cette fonction depuis mon compte d'exploitation ( qui n'a plus de droit sur le schéma pg_catalog ) avec succès.
Hors ligne