]> granicus.if.org Git - postgresql/commitdiff
Only show pg_stat_replication details to superusers
authorMagnus Hagander <magnus@hagander.net>
Sun, 23 Jan 2011 16:28:19 +0000 (17:28 +0100)
committerMagnus Hagander <magnus@hagander.net>
Sun, 23 Jan 2011 16:28:19 +0000 (17:28 +0100)
doc/src/sgml/monitoring.sgml
src/backend/replication/walsender.c

index 241131ce6144f3bd3d2c54d067cb41ac216276bb..306af4e454405aec18fbac4bb55c94a82e81b965 100644 (file)
@@ -299,7 +299,9 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
       <entry>One row per WAL sender process, showing process <acronym>ID</>,
       user OID, user name, application name, client's address and port number,
       time at which the server process began execution, current WAL sender
-      state and transaction log location.
+      state and transaction log location. The columns detailing what exactly
+      the connection is doing are only visible if the user examining the view
+      is a superuser.
      </entry>
      </row>
 
index 14b43d855bade3979442d03de31b820d06136b79..8a6392345697035028ba2c08165e050ae3d5330b 100644 (file)
@@ -1141,8 +1141,20 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
 
                memset(nulls, 0, sizeof(nulls));
                values[0] = Int32GetDatum(walsnd->pid);
-               values[1] = CStringGetTextDatum(WalSndGetStateString(state));
-               values[2] = CStringGetTextDatum(sent_location);
+               if (!superuser())
+               {
+                       /*
+                        * Only superusers can see details. Other users only get
+                        * the pid value to know it's a walsender, but no details.
+                        */
+                       nulls[1] = true;
+                       nulls[2] = true;
+               }
+               else
+               {
+                       values[1] = CStringGetTextDatum(WalSndGetStateString(state));
+                       values[2] = CStringGetTextDatum(sent_location);
+               }
 
                tuplestore_putvalues(tupstore, tupdesc, values, nulls);
        }