Page 1 sur 1

Accéder dynamiquement aux nouveaux objets d'un autre utilisateur

Posté : mar. 26 mars 2019 17:11
par Phil
Merci à Julien pour sa question :

"J’ai créé trois utilisateurs sur une base PostgreSQL 11 : BOSS, FILS1 et FILS2.
BOSS doit pouvoir accéder aux schémas de FILS1, FILS2 sans restriction.
J’ai donc passé des grants de ce genre :
grant select on all tables in schema FILS1 to BOSS;
grant select on all tables in schema FILS2 to BOSS;
etc.

Problème, les nouvelles tables/vues que je crée dans les schémas de FILS1 et FILS2 ne sont pas dynamiquement accessibles à BOSS, il faut que je repasse le grant select etc.
Une idée pour rendre ça définitif ?"


Réponse :
Si BOSS doit vraiment pouvoir accéder sans restriction aux schémas appartenant à FILS1, FILS2 etc. alors le plus simple est de faire une fois pour chaque FILS un

Code : Tout sélectionner

grant FILS to BOSS;
commit;
Attention, BOSS aura alors tous les droits sur les objets appartenant à FILS, y-compris de les supprimer !
Si vous voulez restreindre d'une quelconque façon les privilèges de BOSS par rapport à ceux de FILS alors cette solution est inadéquate.

Accéder dynamiquement aux nouveaux objets d'un autre utilisateur en lecture seule

Posté : mer. 18 sept. 2019 17:06
par Phil
Merci à un DBA pour sa question :

"J'ai un peu le même problème mais un peu différent. Je veux fournir un accès en lecture seule à toutes les tables d'un schéma d'un autre utilisateur dynamiquement. Cette solution fonctionnerait mais l'utilisateur en lecture seule pourrait écrire et supprimer les tables, ce que je ne veux pas. Est-ce possible ?


Réponse :

C'est tout à fait possible, il faut juste une solution un peu plus élaborée pour votre cas.
Supposons que le schéma s'appelle schema_applicatif et que le rôle (utilisateur) devant avoir accès en lecture s'appelle lecture_seule, cela donne :

1. Donner l'accès au schéma

Code : Tout sélectionner

GRANT USAGE ON SCHEMA schema_applicatif TO lecture_seule;
2. Donner l'accès en lecture sur les tables existantes

Code : Tout sélectionner

GRANT SELECT ON ALL TABLES IN SCHEMA schema_applicatif TO lecture_seule;
3. Donner l'accès en lecture sur les tables qui seront créées afin de rendre la solution dynamique

Code : Tout sélectionner

ALTER DEFAULT PRIVILEGES IN SCHEMA schema_applicatif GRANT SELECT ON TABLES TO lecture_seule;
COMMIT;
Cette solution fonctionne pour toutes les versions supportées de PostgreSQL au 18/09/2019, c'est à dire de la 9.4 à la 11 (elle fonctionnerait en fait aussi à partir de PostgreSQL 9.0)