Как дать привелегии на таблицу в другой схеме для обращения к ней в функции?

Создаю функцию, которая обращается запросом к таблице другого пользователя (пользователь Б). Но при создании ошибка, что таблицы не существует.

Функция создаётся под пользователем А. Синоним есть, привелегии на select для таблицы пользователя Б у пользователя А есть, но не создаётся.

Если выполняю такое:

grant all privileges to userA;

То функция создаётся без ошибок. Но так конечно неправильно.

Выдача привелегий:

alter, delete, insert, select, update, references, debug, flashback, on commit, query rewrite to public

на эту таблицу тоже ничего не даёт.

Что может быть не так?


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

Автор решения: 0xdb

Привелегии пользователю А на таблицы пользователя Б выделены через роли.

Выделенные через роли привилегии действуют в SQL и анонимных блоках.
Но они не действуют в именованных блоках PL/SQL кода - функциях, процедурах итд.

Надо выделить привелеги напрямую, то есть так:

grant select on B.tab to A;
→ Ссылка