Вставка таблицы не работает в процедуре пакета B при вызове из процедуры пакета A - PullRequest
1 голос
/ 04 июня 2019

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

Это в среде Oracle 12c. Table1 и view1 принадлежат пользователю U1. Существует вставка в view1 с помощью процедуры в пакете A, принадлежащей пользователю 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) Все проверено в одной редакции

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

1 Ответ

2 голосов
/ 04 июня 2019

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

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

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

...