Как дать привелегии на таблицу в другой схеме для обращения к ней в функции?
Создаю функцию, которая обращается запросом к таблице другого пользователя (пользователь Б). Но при создании ошибка, что таблицы не существует.
Функция создаётся под пользователем А. Синоним есть, привелегии на select для таблицы пользователя Б у пользователя А есть, но не создаётся.
Если выполняю такое:
grant all privileges to userA;
То функция создаётся без ошибок. Но так конечно неправильно.
Выдача привелегий:
alter, delete, insert, select, update, references, debug, flashback, on commit, query rewrite to public
на эту таблицу тоже ничего не даёт.
Что может быть не так?
Ответы (1 шт):
Привелегии пользователю А на таблицы пользователя Б выделены через роли.
Выделенные через роли привилегии действуют в SQL и анонимных блоках.
Но они не действуют в именованных блоках PL/SQL кода - функциях, процедурах итд.
Надо выделить привелеги напрямую, то есть так:
grant select on B.tab to A;