Доступ к таблице другого пользователя в хранимой процедуре Oracle
Я пишу хранимую процедуру для копирования данных из таблицы одного пользователя в другую схему. В основном, это серия INSERT .. Выберите такие операторы, как:
INSERT INTO GESCHAEFTE
SELECT *
FROM TURAT03.GESCHAEFTE
WHERE kong_nr = 1234;
это отлично работает при выпуске из sqlplus (или жабы для меня ; -)), поэтому я знаю, что у меня есть достаточные привилегии, но когда это часть хранимой процедуры, как это:
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
, но не выгода.
что еще я могу сделать? У меня здесь почти закончились идеи.
1 ответов
владельцу процедуры должна быть предоставлена привилегия для прямого доступа к базовым объектам,не через роль. Чтобы иметь тот же уровень доступа, что и ваши процедуры, используйте следующие команды:
SET ROLE NONE;
чтобы получить доступ к другой таблице из процедуры, вам нужно предоставить SELECT напрямую, а не через роль:
GRANT SELECT ON TURAT03.GESCHAEFTE TO <your_user>;
эта статья Тома Кайта содержит дополнительную информацию.