Як переглянути запит іншого сеансу в pg_stat_activity, не будучи суперкористувачем?


13

У мене база даних Postgresql 9.2. На цій базі даних створено два користувачі. Коли я виконую наступний запит як суперрузер, я бачу все.

select * from pg_stat_activity

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

Яку привілей / роль я повинен надати / створити для отримання результатів, які може побачити суперпользователь?


На даний момент права на надання права немає, це жорстко кодується суперпользователю. Про це обговорювали останнім часом у списку розсилки, і він може змінитися в 9,5, якщо хтось знайде час для роботи над ним.
Крейг Рінгер

Відповіді:


21

На даний момент права на надання права немає, це жорстко кодується суперпользователю. Про це обговорювали останнім часом у списку розсилки, і він може змінитися в 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.