powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Рекурсия в SECURITY DEFINER
5 сообщений из 5, страница 1 из 1
Рекурсия в SECURITY DEFINER
    #33097461
GateKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть функция func_com(), определяющая возврат общих данных, необходимых для множества других функций. Данные эти могут, например, являться достаточно конфиденциальной информацией.

Есть функции func_1(), func_2()..., которые перед выполнением определенных в них действий сначала запрашивают конфигурацию через выполнение func_com().

Прав у пользователей, работающих с базой, на прямую работу с таблицами нет. Есть права EXEC на func_1(), func_2()... и нет прав на func_com().

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

Версия 8.0.0 и 8.0.3

Вопрос: разве SECURITY DEFINER не определяет рекурсию для выполнения любых действий, описанных в функции? Если нет, то как реализовать подобную рекурсию полномочий без предоставления пользователям возможности вызывать ненужные им функции?
...
Рейтинг: 0 / 0
Рекурсия в SECURITY DEFINER
    #33097504
Meta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перепроверь права и атрибуты созданных свойств (через pgAdmin, к примеру)
Возможно всё же где-то ошибка.
А лучше дропни функции и создай заново
...
Рейтинг: 0 / 0
Рекурсия в SECURITY DEFINER
    #33097543
GateKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет... С правами все нормально. Дропать... тоже смысла не вижу - все из дампа только что восстанавливал. Дамп построчно проверил - тоже без косяков. Все равно не пойму никак...
...
Рейтинг: 0 / 0
Рекурсия в SECURITY DEFINER
    #33097583
Meta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE FUNCTION outer_func()
  RETURNS int4 AS
$BODY$BEGIN
  RETURN inner_func();
END
$BODY$
  LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
ALTER FUNCTION outer_func() OWNER TO postgres;
GRANT EXECUTE ON FUNCTION outer_func() TO public;
GRANT EXECUTE ON FUNCTION outer_func() TO postgres;

CREATE OR REPLACE FUNCTION inner_func()
  RETURNS int4 AS
$BODY$BEGIN
  RETURN (random() *  1000 )::int4;
END$BODY$
  LANGUAGE 'plpgsql' VOLATILE STRICT SECURITY DEFINER;
ALTER FUNCTION inner_func() OWNER TO postgres;
GRANT EXECUTE ON FUNCTION inner_func() TO postgres;

Версия 8.0.1
Всё нормально работает для тестового пользователя.
Соответственно тестовый юзер не может выполнять функцию inner_func, но может - outer_func
...
Рейтинг: 0 / 0
Рекурсия в SECURITY DEFINER
    #33097804
GateKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, разобрался. Спасибо огромное. Все долбаный pgadmin (который, кстати, в FreeBSD у меня глючит безбожно) - создает функцию, не делая GRANT EXECUTE для владельца. При этом владельцу пофиг - функцию исполняет, как надо все в общем, а при рекурсии уже хрен - не может.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Рекурсия в SECURITY DEFINER
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]