2015-10-11 4 views
0

У меня есть пользователь, который должен иметь доступ только для 2-х функций, так что я получил их ему:GRANT EXECUTE не предоставление доступа к соответствующим таблицам функции

REVOKE ALL ON FUNCTION some_func(firstid INT) FROM PUBLIC; 
GRANT EXECUTE ON FUNCTION some_func(firstid INT) TO some_user; 

Но я получаю странные ошибки:

42501: permission denied for relation some_table 

при попытке получить доступ к моей функции с:

SELECT * FROM offers_get(0); 

моя функция выглядит следующим образом:

CREATE OR REPLACE FUNCTION public.some_func(firstid integer) 
RETURNS TABLE(/* something */) 
LANGUAGE plpgsql 
AS $function$ 
DECLARE 
    /* something */ 
BEGIN 
    /* some other logic */ 
    RETURN QUERY SELECT * FROM some_table; 
END; 
$function$ 

Таким образом, доступ к связанным таблицам не был предоставлен? Как предоставить доступ только для выполнения функции?

ответ

1

Вы хотите определить функцию, используя SECURITY DEFINER (см. documentation).

По умолчанию Postgres использует разрешения вызывающего, а не определителя.

CREATE OR REPLACE FUNCTION public.some_func(firstid integer) 
RETURNS TABLE(/* something */) 
LANGUAGE plpgsql 
SECURITY DEFINER 
. . . 
+0

Спасибо вам большое. Мяу. –

Смежные вопросы