Разрешение с функцией postgresql - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу выполнить запрос к базе данных PostgreSQL. Запрос выглядит следующим образом:

select * from pg_stat_activity;

Но я хочу, чтобы это сделал пользователь, имеющий только разрешение на чтение. Пользователю не должно быть разрешено делать выбор в таблицах, потому что он только видит, кто подключен к базе данных, и не может видеть такие таблицы, как, например, Passwords.

Одним из решений этой проблемы является выполнение функции, которую суперпользователь запускает для обычного пользователя, которому не разрешено просматривать выходные данные.

Но у меня проблемы с созданием этой функции.

Я хочу, чтобы запрос был только в таблицах системного каталога. Для функции ниже:

CREATE FUNCTION test(TEXT)
RETURNS TABLE AS $$

BEGIN
    RETURN QUERY $1
    RETURN;
END;

$$  LANGUAGE plpgsql

    SECURITY DEFINER
    -- Set a secure search_path: trusted schema(s), then 'pg_temp'.
    SET search_path = pg_catalog;

Можно ли запустить эти команды в psql для создания функции?

CREATE FUNCTION test(TEXT) ... SECURITY DEFINER;
REVOKE ALL ON FUNCTION test(TEXT) FROM PUBLIC;
GRANT EXECUTE ON FUNCTION test(TEXT) TO admins;

Функция будет выполняться так?

select *from test(select *from pg_stat_activity);

Как определить, что функция выполняет только запросы, относящиеся к pg_catalog?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...