Как узнать, получен ли грант напрямую или через роль? - PullRequest
3 голосов
/ 19 января 2010

Одной из ловушек в Oracle является тот факт, что иногда вы можете выбирать из таблицы, если вы запускаете запрос в SQLplus, но вы не можете этого делать при запуске запроса из хранимой процедуры. Чтобы выполнить запрос из хранимой процедуры, вам нужен прямой грант для объекта, а не грант, полученный с помощью роли.

Если я вижу таблицу в представлении all_tables, как я могу узнать, вижу ли я эту таблицу из-за прямого предоставления или из-за предоставления роли?

Ответы [ 2 ]

6 голосов
/ 19 января 2010

Посмотрите на ALL_TAB_PRIVS:

select grantee from all_tab_privs 
where table_schema = 'SCOTT' and table_name='EMP'
and privilege = 'SELECT';

Здесь показаны все получатели грантов, будь то роли или пользователи.

1 голос
/ 19 января 2010

Один из способов увидеть точно , что увидит процедура, - выполнить команду:

SET ROLE none

Отключает все роли для текущего сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...