Может ли быть запущена только одна процедура в пакете PL / SQL с AUTHID CURRENT_USER? - PullRequest
4 голосов
/ 29 сентября 2011

У меня есть пакет PL / SQL, который не указывает AUTHID (фактически делает его AUTHID DEFINER).Однако в этом пакете есть только одна процедура, которую нужно запустить как AUTHID CURRENT_USER.Возможно ли это, или я должен создать отдельную процедуру верхнего уровня?

Ответы [ 4 ]

4 голосов
/ 29 сентября 2011

Уверен, новый пакет понадобится, так как AUTHID может быть указан только на уровне ПАКЕТА (насколько мне известно в любом случае)

2 голосов
/ 30 сентября 2011

Хотя этот связанный вопрос немного не по теме, ответ, предоставленный JulesLt, объясняет, что вы не можете указать AUTHID в пакете на уровне ниже уровня пакета:

Выполнение хранимого процесса Oracle в качестве другого пользователя

0 голосов
/ 16 марта 2016

Возможное решение может быть следующим:

  1. Вы создаете пакет с опцией AUTHID CURRENT_USER;
  2. Вы предоставляете выбор, вставку и т. Д. Для объектов, которые находятся в схеме DEFINER , которую вы хотите использовать;
  3. Вы используете полные имена объектов DEFINER.

Вот пример:

CREATE PACKAGE pkg1 AUTHID CURRENT_USER
IS
  procedure insert_current_user;
  procedure insert_definer;
END pkg1;
/
CREATE OR REPLACE PACKAGE BODY pkg1
IS
  procedure insert_current_user
  is
  begin
    insert into table1 values(1);
  end insert_current_user;

  procedure insert_definer
  is
  begin
    insert into DEFINER.table1 values(1);
  end insert_definer;
END pkg1;
/

DEFINER является владельцем таблицы.

В качестве улучшения вы можете создать синоним для таблицы DEFINER.table1 и затем использовать синонимы в пакете.

0 голосов
/ 09 октября 2012

Oracle не допускает выражение authid для подпрограммы в пакете или типе.Вы получите следующую ошибку:

Error: PLS-00157: AUTHID only allowed on schema-level programs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...