PostgreSQL не видит прав доступа

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

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

GRANT execute ON function create_order(integer,varchar) to c_role;

Права доступа, которые выдаю на представления полностью работают, а с функциями такая проблема.


Ответы (1 шт):

Автор решения: Мелкий

может вызывать и другим пользователь у которого нету прав на нее

А вы сами отобрали права запуска? Строго по документации:

Another point to keep in mind is that by default, execute privilege is granted to PUBLIC for newly created functions (see Section 5.7 for more information). Frequently you will wish to restrict use of a security definer function to only some users. To do that, you must revoke the default PUBLIC privileges and then grant execute privilege selectively. To avoid having a window where the new function is accessible to all, create it and set the privileges within a single transaction. For example:

BEGIN;
CREATE FUNCTION check_password(uname TEXT, pass TEXT) ... SECURITY DEFINER;
REVOKE ALL ON FUNCTION check_password(uname TEXT, pass TEXT) FROM PUBLIC;
GRANT EXECUTE ON FUNCTION check_password(uname TEXT, pass TEXT) TO admins;
COMMIT;

По-умолчанию create function предоставляет право execute для всех.

→ Ссылка