Wie kann ich die Abfrage einer anderen Sitzung in pg_stat_activity anzeigen, ohne Superuser zu sein?

13

Ich habe eine Postgresql 9.2-Datenbank. Auf dieser Datenbank werden zwei Benutzer erstellt. Wenn ich als Superuser die folgende Abfrage durchführe, kann ich alles sehen.

select * from pg_stat_activity

Ist es jedoch möglich, dasselbe Ergebnis zu erzielen, ohne als Superuser verbunden zu sein?

Welches Privileg / welche Rolle sollte ich vergeben / erstellen, um die Ergebnisse zu erzielen, die ein Superuser sehen kann?

Stephan
quelle
Zu diesem Zeitpunkt gibt es kein Recht zu gewähren, es ist für den Superuser fest programmiert. Das wurde kürzlich auf der Mailingliste besprochen und kann sich in Version 9.5 ändern, wenn jemand die Zeit findet, daran zu arbeiten.
Craig Ringer

Antworten:

20

Zu diesem Zeitpunkt gibt es kein Recht zu gewähren, es ist für den Superuser fest programmiert. Das wurde kürzlich auf der Mailingliste besprochen und kann sich in Version 9.5 ändern, wenn jemand die Zeit findet, daran zu arbeiten.

Um dieses Problem zu umgehen, können Sie eine SECURITY DEFINERFunktion erstellen , die dem Superuser gehört, und die gewünschte Abfrage ausführen. Auf diese Weise können Nicht-Superuser pg_stat_activitydurch Aufrufen der Funktion den Inhalt von einsehen .

ZB als Superuser ausführen:

CREATE FUNCTION get_sa() RETURNS SETOF pg_stat_activity AS
$$ SELECT * FROM pg_catalog.pg_stat_activity; $$
LANGUAGE sql
VOLATILE
SECURITY DEFINER;

CREATE VIEW pg_stat_activity_allusers AS SELECT * FROM get_sa();

GRANT SELECT ON pg_stat_activity_allusers TO public;

Beachten Sie, dass der freie Zugang zu pg_stat_activityaus einem bestimmten Grund eingeschränkt ist. Es ist möglich, vertrauliche Informationen aus den Abfragen anderer Personen herauszuspüren - stellen Sie sich zum Beispiel vor, ein anderer Benutzer würde pgcrypto verwenden. Anstatt publicIhnen Rechte zu gewähren, sollten Sie diese nur einem bestimmten Benutzer oder einer bestimmten Rolle gewähren, der bzw. die als Ersatzbenutzer für die Überwachung fungiert.

Craig Ringer
quelle
Vielen Dank! Ich habe nur versucht herauszufinden, wie ich einem Monitorkonto die Berechtigung zum Lesen von pg_stat_activity erteilen kann, ohne SUPERUSER zu erteilen.
Epic_fil
3

Ab PostgreSQL 10 können Sie die Rolle vergeben pg_read_all_stats, um das gewünschte Ergebnis zu erzielen.

Radu Dumbrăveanu
quelle