Во-первых, вы должны разрешить 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
в этом разделе.