У меня проблемы с пониманием привилегий в PostgreSQL.
Например, у меня есть веб-приложение с пользователем webapiuser
. Этот пользователь ограничен в том смысле, что он может работать с базой данных только через какую-то функцию. Это означает, что нет прямых операций CRUD с БД, только с помощью функций, созданных пользователем god postgres
и только в пределах его собственного домена . Я сделал все виды чтения со многими учебными пособиями, указывающими на добавление SECURITY DEFINER
к каждой функции, но это позволяет функции выполняться владельцем функции от имени пользователя, который побеждает цель в моем понимание; В конце концов я пытаюсь заблокировать такого рода доступ.
Я уже создал пользователя с:
CREATE USER webapiuser WITH PASSWORD <password>;
И предоставил USAGE
для всех схем:
GRANT USAGE ON SCHEMA schemaA TO webapiuser;
GRANT USAGE ON SCHEMA schemaB TO webapiuser;
GRANT USAGE ON SCHEMA poublic TO webapiuser;
Я пытался добавить:
GRANT EXECUTE ON FUNCTION schemaA.func_myfunction() TO webapiuser;
Но тогда я получил permission denied for view view_my_view
. Функция выбирает из этого представления, поэтому я думаю, что команда GRANT
работает. Я получаю похожую ошибку permission denied for table my_table
, если я выполняю функцию, которая выполняет операции вставки. Как далеко вниз по привилегированной кроличьей норе я должен go выполнить эту, казалось бы, простую задачу? И если я предоставлю INSERT
, UPDATE
, DELETE
привилегии этому пользователю для этих таблиц напрямую, то это противоречит цели.
Не должно ли предоставление пользователю EXECUTE
разрешений для функции, позволяющих это сделать что-нибудь в рамках этой функции?