Вставка таблицы не работает в процедуре пакета B при вызове из процедуры пакета A

Я пытаюсь вставить в отредактированное представление (представление1 - определенное в таблице table1) в процедуре (определенной в пакете A в пользователе U1) при вызове из другого пакета B (определенного в пользователе U2). Это ошибка с недостаточными привилегиями.

Это в среде Oracle 12c. Table1 и view1 принадлежат пользователю U1. В представление 1 вставлена ​​процедура в пакете А, принадлежащая пользователю U1. Пакет B (в U2) вызывает эту процедуру для вставки. 1) В U2 создан синоним для U1.view1 (проверено в all_synonyms) 2) Существует роль (R1), которая имеет привилегию вставки для view1 (проверено в ROLE_TAB_PRIVS) 3) Роль R1 назначена пользователю U2 ( проверяется в DBA_ROLE_PRIVS) 4) Роль R1 — роль по умолчанию 5) Пакет B — права определяющего, а пакет A — права вызывающего 5) Все проверяется в той же редакции

Я ожидаю, что вставка произойдет в представление 1, поскольку роль назначена пользователю U2. Но этого не происходит, выдает ошибку "недостаточно привилегий". Но когда я явно предоставляю вставку в этот view1 пользователю U2, это работает. Означает ли это, что доступа только через роли недостаточно, если пакет A имеет права вызывающего?


person Vinay    schedule 04.06.2019    source источник


Ответы (1)


«Означает ли это, что доступа только через роли недостаточно, если пакет A имеет права вызывающего?»

Проще всего. Мы не можем создавать пакеты, представления или триггеры PL/SQL, используя привилегии, предоставленные ролями. Именно так работает модель безопасности Oracle. Все привилегии, необходимые для создания таких объектов, должны быть предоставлены непосредственно пользователю.

Еще одна проблема заключается в том, что если мы создаем представление (или что-то еще), используя привилегии для объекта в другой схеме, и мы хотим предоставить доступ к нашему представлению другим, тогда привилегии, которые мы получаем, должны быть предоставлены WITH GRANT OPTION.

person APC    schedule 04.06.2019