Come visualizzare la query di un'altra sessione in pg_stat_activity senza essere un superutente?


13

Ho un database Postgresql 9.2. Due utenti vengono creati su questo database. Quando eseguo la seguente query come superutente, posso vedere tutto.

select * from pg_stat_activity

Tuttavia, è possibile ottenere lo stesso risultato senza essere collegati come superutente?

Quale privilegio / ruolo dovrei concedere / creare per avere i risultati che un superutente può vedere?


A questo punto, non esiste alcun diritto di concessione, è codificato per il superutente. È stato discusso recentemente sulla mailing list e potrebbe cambiare in 9.5 se qualcuno trova il tempo di lavorarci sopra.
Craig Ringer,

Risposte:


20

A questo punto, non esiste alcun diritto di concessione, è codificato per il superutente. È stato discusso recentemente sulla mailing list e potrebbe cambiare in 9.5 se qualcuno trova il tempo di lavorarci sopra.

Per ovviare al problema, è possibile creare una SECURITY DEFINERfunzione di proprietà del superutente ed eseguire la query desiderata. Ciò consentirà ai non utenti di visualizzare i contenuti pg_stat_activitychiamando la funzione.

Ad esempio, esegui come superutente:

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;

Si noti che l'accesso gratuito pg_stat_activityè limitato per un motivo. È possibile ficcare informazioni riservate dalle query di altre persone, ad esempio se un altro utente stava usando pgcrypto. Invece di concederti i diritti public, dovresti concederli solo a un utente o ruolo specifico che deve agire come utente surrogato per il monitoraggio.


Grazie! Stavo solo cercando di capire come autorizzare un account monitor a leggere da pg_stat_activity senza concedere SUPERUSER.
epic_fil,

3

A partire da PostgreSQL 10 è possibile concedere il ruolo pg_read_all_statsper ottenere il risultato desiderato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.