У меня есть база данных Postgresql 9.2. В этой базе данных создано два пользователя. Когда я выполняю следующий запрос как суперпользователь, я вижу все.
select * from pg_stat_activity
Однако можно ли получить тот же результат, не будучи подключенным как суперпользователь?
Какую привилегию / роль я должен предоставить / создать, чтобы получить результаты, которые может видеть суперпользователь?
postgresql
postgresql-9.2
permissions
role
Stephan
источник
источник
Ответы:
На данный момент нет права предоставлять, это жестко запрограммировано для суперпользователя. Это обсуждалось в списке рассылки в последнее время и может измениться в 9.5, если кто-то найдет время поработать над ним.
В качестве обходного пути вы можете создать
SECURITY DEFINER
функцию, которая принадлежит суперпользователю и выполняет нужный запрос. Это позволит не суперпользователям видеть содержимоеpg_stat_activity
, вызывая функцию.Например, запустить от имени суперпользователя:
Обратите внимание, что бесплатный доступ к
pg_stat_activity
ограничен по причине. Можно получить конфиденциальную информацию из запросов других людей - представьте, например, что другой пользователь использовал pgcrypto. Вместо того, чтобы предоставлятьpublic
вам права , следует предоставлять их только определенному пользователю или роли, которая должна выполнять роль суррогатного пользователя для мониторинга.источник
Начиная с PostgreSQL 10 вы можете назначить роль
pg_read_all_stats
для достижения желаемого результата.источник