Как разрешить пользователю вызывать хранимую процедуру в Postgresql без предоставления дополнительных прав? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть хранимая процедура в Postgresql, которая содержит оператор COMMIT, и я бы хотел, чтобы пользователи имели доступ только к этой процедуре, не предоставляя им право выбирать, вставлять и т. Д. В функции я бы использовал SECURITY DEFINER, но из официальных документов https://www.postgresql.org/docs/11/sql-createprocedure.html:

Процедура SEFURITY DEFINER не может выполнять операторы управления транзакциями (например, COMMIT и ROLLBACK, в зависимости от языка).

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

Как можно вызвать хранимую процедуру с оператором COMMIT, не имея индивидуальных грантов для всех операторов внутри процедуры?

1 Ответ

0 голосов
/ 16 мая 2019

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

GRANT ALL ON PROCEDURE <procedure_name> TO <role>;
...