ORA-01031: недостаточно прав при вставке через процедуру

У меня есть две схемы БД Oracle SCHEMA1 и SCHEMA2 в одном экземпляре.

Объекты в SCHEMA1: 1. Процедура PROC_ABC.

Объекты в SCHEMA2: 1. Таблица TABLE_DEF. 2. Триггер TRIG_DEF.

Предоставляет: 1. Предоставление вставки любой таблицы в SCHEMA1 пользователем SYSTEM. 2. Предоставьте вставку в TABLE_DEF для SCHEMA1 пользователем SCHEMA2. 3. Предоставить выполнение на PROC_ABC для SCHEMA2 пользователем SCHEMA1.

Проблема: когда я запускаю команду "вставить в SCHEMA2.TABLE_DEF.." из SCHEMA1, она работает правильно. Но когда та же команда вставки запускается изнутри тела процедуры PROC_ABC, она выдает ошибку. Обратите внимание, что процедура PROC_ABC в SCHEMA1 вызывается триггером TRIG_DEF из Schema2.

Ошибка: ORA-01031: недостаточно прав

1 ответ

В Oracle вы можете выбрать, будет ли процедура выполняться с определенными правами или правами пользователя. При определенных правах процедура выполняется с привилегиями владельца схемы (по умолчанию).

CREATE OR REPLACE PRODECURE schema.procedure_name () AUTHID CURRENT_USER AS ...

или же

CREATE OR REPLACE PRODECURE schema.procedure_name () AUTHID DEFINER AS ...

Если PROC_ABC был объявлен с AUTHID CURRENT_USER, то он будет работать с правами того, кто его вызывает. Укажите AUTHID DEFINER, чтобы он работал с привилегиями SCHEMA1.

Также обратите внимание, что триггеры выполняются как определитель триггера.

Другие вопросы по тегам