Доступ к таблице другого пользователя в рамках хранимой процедуры Oracle
-
10-10-2019 - |
Вопрос
Я пишу хранимую процедуру для копирования данных из таблицы одного пользователя в другую схему.По сути, это серия ВСТАВОК..ВЫБЕРИТЕ инструкции, подобные этой:
INSERT INTO GESCHAEFTE
SELECT *
FROM TURAT03.GESCHAEFTE
WHERE kong_nr = 1234;
Это отлично работает при выдаче из sqlplus (или TOAD для меня ;-)) поэтому я знаю, что у меня есть достаточные привилегии, но когда это является частью хранимой процедуры, подобной этой:
CREATE OR REPLACE FUNCTION COPY_KONG
(pKongNr IN NUMBER)
RETURN NUMBER
AUTHID CURRENT_USER
IS
BEGIN
INSERT INTO GESCHAEFTE
SELECT *
FROM TURAT03.GESCHAEFTE
WHERE kong_nr = pKongNr;
END;
Я получаю сообщение об ошибке Oracle:
[Error] ORA-00942 (11: 22): PL/SQL: ORA-00942: table or view does not exist
Как вы можете видеть, я уже вставил AUTHID
, но безрезультатно.
Что еще я могу сделать?Здесь я в значительной степени подошел к концу своих идей.
Решение
Владельцу процедуры должно быть предоставлено право прямого доступа к базовым объектам, не через роль.Чтобы иметь тот же уровень доступа, что и ваши процедуры, используйте следующие команды:
SET ROLE NONE;
Чтобы получить доступ к другой таблице из процедуры, вам необходимо получить право ВЫБОРА напрямую, а не через роль:
GRANT SELECT ON TURAT03.GESCHAEFTE TO <your_user>;
Эта статья Тома Кайта содержит дополнительную информацию.