Contexte
Sous Postgresql, il n’existe pas, dans les versions actuelles, de privilège spécifique permettant de donner l’accès en lecture à un utilisateur, sur l’ensemble des objets d’une base de données (schémas, tables, vues, séquences…).
Il faut donc procéder en plusieurs étapes.
Ci-dessous sont décrites les différentes étapes pour autoriser l’utilisateur « mon_user_read_only » en lecture pour toutes les tables, vues et séquences du schéma « mon_schema » de la base « ma_base ».
Il faut être connecté à la base en question.
Solution
Connecté en tant que user postgres, autoriser le user sur le schéma.
ma_base=# GRANT USAGE ON SCHEMA mon_schema TO mon_user_read_only ;
Connecté en tant que user postgres, autoriser le user en lecture sur toutes les tables, vues et séquences existantes du schéma :
ma_base=# GRANT SELECT ON ALL TABLES IN SCHEMA mon_schema TO mon_user_read_only ; ma_base=# GRANT SELECT ON ALL SEQUENCES IN SCHEMA mon_schema TO mon_user_read_only ;
Connecté en tant que user postgres, autoriser le user en lecture sur toutes les futures tables, vues et séquences qui seront créées dans le schéma par le user postgres :
ma_base=# ALTER DEFAULT PRIVILEGES IN SCHEMA mon_schema GRANT SELECT ON TABLES TO mon_user_read_only ; ma_base=# ALTER DEFAULT PRIVILEGES IN SCHEMA mon_schema GRANT SELECT ON SEQUENCES TO mon_user_read_only ;
Attention : si des tables, vues ou séquences dans ce schéma peuvent potentiellement être créées par un autre user (exemple : le owner des objets du schéma), il faut également rejouer les mêmes commandes que précédemment, mais en étant connecté avec le user qui est owner, et non pas le user « postgres ». Sinon, le user en read only n’aurait pas le droit de lecture sur les objets créés par le owner :
ma_base=# ALTER DEFAULT PRIVILEGES IN SCHEMA mon_schema GRANT SELECT ON TABLES TO mon_user_read_only ; ma_base=# ALTER DEFAULT PRIVILEGES IN SCHEMA mon_schema GRANT SELECT ON SEQUENCES TO mon_user_read_only ;
Toutes ces opérations sont à répéter pour chaque schéma de la base de données sur laquelle on souhaite donner le droit de lecture sur les objets.