Как postgresql дает разрешение пользователю выполнять функцию в схеме - PullRequest
0 голосов
/ 08 октября 2018

У меня есть функция с именем schema.func, я хочу дать пользователю разрешение на выполнение schema.func.

Я пытаюсь использовать

GRANT EXECUTE ON schema.func to my_user;

, но это не такза работой.Когда я выполняю эту функцию, она выдает ошибку:

в схеме отказано в разрешении, например

Я знаю, что могу использовать GRANT USAGE ON SCHEMA, но это не то, что я хочу,Мне просто нужны разрешения для определенных функций, а не для всех функций в схеме.

Можно ли это сделать?

1 Ответ

0 голосов
/ 09 октября 2018

Во-первых, вы должны разрешить my_user доступ к другой схеме:

GRANT USAGE ON SCHEMA my_schema TO my_user;

Это разрешает выполнение функций, но не доступ к таблицам.Таким образом, если my_user выполняет функцию, она все равно выдает ошибку доступа, если функция обращается к таблицам и т. Д. В my_schema.Чтобы избежать этого, вы можете определить свою функцию как определитель безопасности :

ALTER FUNCTION my_schema.my_function(...) SECURITY DEFINER SET search_path = public;

Редактировать: Написание функций SEFURITY DEFINER Безопасно также указывает способ дать разрешение на выполнениеконкретные пользователи:

REVOKE ALL ON FUNCTION my_schema.my_function(...) FROM PUBLIC;
GRANT EXECUTE ON FUNCTION my_schema.my_function(...) TO my_user;

Обратите также внимание на советы по установке search_path в этом разделе.

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