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?
postgresql
postgresql-9.2
permissions
role
Stephan
quelle
quelle
Antworten:
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 DEFINER
Funktion erstellen , die dem Superuser gehört, und die gewünschte Abfrage ausführen. Auf diese Weise können Nicht-Superuserpg_stat_activity
durch Aufrufen der Funktion den Inhalt von einsehen .ZB als Superuser ausführen:
Beachten Sie, dass der freie Zugang zu
pg_stat_activity
aus 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. Anstattpublic
Ihnen 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.quelle
Ab PostgreSQL 10 können Sie die Rolle vergeben
pg_read_all_stats
, um das gewünschte Ergebnis zu erzielen.quelle