J'ai une base de données Postgresql 9.2. Deux utilisateurs sont créés sur cette base de données. Lorsque j'effectue la requête suivante en tant que superutilisateur, je peux tout voir.
select * from pg_stat_activity
Cependant, est-il possible d'obtenir le même résultat sans être connecté en tant que superutilisateur?
Quel privilège / rôle dois-je accorder / créer pour obtenir les résultats qu'un superutilisateur peut voir?
postgresql
postgresql-9.2
permissions
role
Stephan
la source
la source
Réponses:
À ce stade, il n'y a aucun droit d'accorder, il est codé en dur pour le superutilisateur. Cela a été discuté récemment sur la liste de diffusion et peut changer en 9.5 si quelqu'un trouve le temps de travailler dessus.
Pour contourner ce problème, vous pouvez créer une
SECURITY DEFINER
fonction appartenant au superutilisateur et exécuter la requête souhaitée. Cela permettra aux non-superutilisateurs de voir le contenu depg_stat_activity
en appelant la fonction.Par exemple, exécutez en tant que superutilisateur:
Notez que l'accès gratuit à
pg_stat_activity
est limité pour une raison. Il est possible d'espionner des informations sensibles à partir des requêtes d'autres personnes - imaginez par exemple si un autre utilisateur utilisait pgcrypto. Plutôt que depublic
vous accorder des droits, accordez-les uniquement à un utilisateur ou à un rôle spécifique qui doit agir en tant qu'utilisateur de substitution pour la surveillance.la source
À partir de PostgreSQL 10, vous pouvez accorder le rôle
pg_read_all_stats
afin d'obtenir le résultat souhaité.la source