Как просмотреть запрос другой сессии в pg_stat_activity, не будучи суперпользователем?


13

У меня есть база данных Postgresql 9.2. В этой базе данных создано два пользователя. Когда я выполняю следующий запрос как суперпользователь, я вижу все.

select * from pg_stat_activity

Однако можно ли получить тот же результат, не будучи подключенным как суперпользователь?

Какую привилегию / роль я должен предоставить / создать, чтобы получить результаты, которые может видеть суперпользователь?


На данный момент нет права предоставлять, это жестко запрограммировано для суперпользователя. Это обсуждалось в списке рассылки в последнее время и может измениться в 9.5, если кто-то найдет время поработать над ним.
Крейг Рингер

Ответы:


20

На данный момент нет права предоставлять, это жестко запрограммировано для суперпользователя. Это обсуждалось в списке рассылки в последнее время и может измениться в 9.5, если кто-то найдет время поработать над ним.

В качестве обходного пути вы можете создать SECURITY DEFINERфункцию, которая принадлежит суперпользователю и выполняет нужный запрос. Это позволит не суперпользователям видеть содержимое pg_stat_activity, вызывая функцию.

Например, запустить от имени суперпользователя:

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;

Обратите внимание, что бесплатный доступ к pg_stat_activityограничен по причине. Можно получить конфиденциальную информацию из запросов других людей - представьте, например, что другой пользователь использовал pgcrypto. Вместо того, чтобы предоставлять publicвам права , следует предоставлять их только определенному пользователю или роли, которая должна выполнять роль суррогатного пользователя для мониторинга.


Благодарность! Просто пытался выяснить, как дать разрешение учетной записи монитора для чтения из pg_stat_activity без предоставления SUPERUSER.
epic_fil

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.