]> granicus.if.org Git - postgresql/commitdiff
Default monitoring roles - errata
authorSimon Riggs <simon@2ndQuadrant.com>
Sat, 6 Jan 2018 11:48:21 +0000 (11:48 +0000)
committerSimon Riggs <simon@2ndQuadrant.com>
Sat, 6 Jan 2018 11:48:21 +0000 (11:48 +0000)
25fff40798fc4ac11a241bfd9ab0c45c085e2212 introduced
default monitoring roles. Apply these corrections:

* Allow access to pg_stat_get_wal_senders()
  by role pg_read_all_stats

* Correct comment in pg_stat_get_wal_receiver()
  to show it is no longer superuser-only.

Author: Feike Steenbergen
Reviewed-by: Michael Paquier
Apply to HEAD, then later backpatch to 10

src/backend/replication/walreceiver.c
src/backend/replication/walsender.c

index a7fc67153ad926be33c45ca449eb0e58e48e52a5..a39a98ff1871c0576fda18170a57c81512dd61b6 100644 (file)
@@ -1442,7 +1442,8 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS)
        if (!is_member_of_role(GetUserId(), DEFAULT_ROLE_READ_ALL_STATS))
        {
                /*
-                * Only superusers can see details. Other users only get the pid value
+                * Only superusers and members of pg_read_all_stats can see details.
+                * Other users only get the pid value
                 * to know whether it is a WAL receiver, but no details.
                 */
                MemSet(&nulls[1], true, sizeof(bool) * (tupdesc->natts - 1));
index 9b63c40e8e2861bcc62e6592ce8831b74fbbb7d5..8bef3fbdaf6d9a99bf74cabb0d01f01d8a5fa36d 100644 (file)
@@ -56,6 +56,7 @@
 #include "access/xlog_internal.h"
 #include "access/xlogutils.h"
 
+#include "catalog/pg_authid.h"
 #include "catalog/pg_type.h"
 #include "commands/dbcommands.h"
 #include "commands/defrem.h"
@@ -3242,11 +3243,12 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
                memset(nulls, 0, sizeof(nulls));
                values[0] = Int32GetDatum(pid);
 
-               if (!superuser())
+               if (!is_member_of_role(GetUserId(), DEFAULT_ROLE_READ_ALL_STATS))
                {
                        /*
-                        * Only superusers can see details. Other users only get the pid
-                        * value to know it's a walsender, but no details.
+                        * Only superusers and members of pg_read_all_stats can see details.
+                        * Other users only get the pid value to know it's a walsender,
+                        * but no details.
                         */
                        MemSet(&nulls[1], true, PG_STAT_GET_WAL_SENDERS_COLS - 1);
                }