Предоставление прав на хранимую процедуру другому пользователю Oracle

Я учусь на бакалавриате, и у меня возникла небольшая проблема с предоставлением прав собственности пользователю A на хранимую процедуру, принадлежащую пользователю B, в базе данных Oracle 10g mode =xe.

Помогите, пожалуйста, написать команды sql для предоставления права собственности на хранимую процедуру xyz другому пользователю A.


person Basmah    schedule 29.11.2010    source источник


Ответы (5)


Я не уверен, что понимаю, что вы подразумеваете под «правами собственности».

Если пользователь Б владеет хранимой процедурой, пользователь Б может предоставить пользователю А разрешение на запуск хранимой процедуры.

GRANT EXECUTE ON b.procedure_name TO a

Затем пользователь А вызовет процедуру, используя полное имя, т.е.

BEGIN
  b.procedure_name( <<list of parameters>> );
END;

В качестве альтернативы пользователь А может создать синоним, чтобы избежать использования полного имени процедуры.

CREATE SYNONYM procedure_name FOR b.procedure_name;

BEGIN
  procedure_name( <<list of parameters>> );
END;
person Justin Cave    schedule 29.11.2010

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

Единственными привилегиями, которые вы можете предоставить процедурам, являются EXECUTE и DEBUG.

Если вы хотите разрешить пользователю B создавать процедуру в схеме пользователя A, пользователь B должен иметь привилегию CREATE ANY PROCEDURE. ALTER ANY PROCEDURE и DROP ANY PROCEDURE — это другие применимые привилегии, необходимые для изменения или удаления процедур пользователя A для пользователя B. Все они имеют широкий диапазон привилегий, поскольку они не ограничивают пользователя B какой-либо конкретной схемой. Пользователь B должен пользоваться большим доверием, если ему предоставлены эти привилегии.

РЕДАКТИРОВАТЬ:

Как упомянул Джастин, способ предоставить A права на выполнение процедуры, принадлежащей B:

GRANT EXECUTE ON b.procedure_name TO a;
person DCookie    schedule 29.11.2010
comment
+1 Менее радикальный подход, чем СОЗДАТЬ ЛЮБУЮ ПРОЦЕДУРУ, но также с подводными камнями, заключался бы в том, чтобы предоставить приложению, использующему пользователя B, пароль для пользователя A, позволяющий им войти в систему как этот пользователь. Похоже, вы хотели бы предоставить привилегии на уровне схемы, но они недоступны в Oracle. - person Leigh Riffel; 29.11.2010
comment
Хорошо, сэр, скажите, пожалуйста, как предоставить права на выполнение пользователю A для запуска хранимой процедуры пользователя B. - person Basmah; 30.11.2010

Пакеты и хранимые процедуры в Oracle выполняются по умолчанию с правами ВЛАДЕЛЬЦА пакета/процедуры, а не текущего пользователя, вошедшего в систему.

Поэтому, если вы вызываете пакет, который создает пользователя, например, его владелец пакета, а не вызывающий пользователь, которому требуется создать привилегию пользователя. Вызывающий объект просто должен иметь разрешение на выполнение пакета.

Если вы предпочитаете, чтобы пакет запускался с правами вызывающего пользователя, то при создании пакета необходимо указать AUTHID CURRENT_USER

Документация Oracle "Права вызывающего и определяющего" содержит дополнительную информацию http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575

Надеюсь это поможет.

person Philip Johnson    schedule 27.10.2014

В вашей учетной записи администратора баз данных предоставьте пользователю USERB право на создание процедуры, используя грант grant create any procedure to USERB.

Процедура будет выглядеть

CREATE OR REPLACE PROCEDURE USERB.USERB_PROCEDURE
--Must add the line below
AUTHID CURRENT_USER AS
  BEGIN
  --DO SOMETHING HERE
  END
END

GRANT EXECUTE ON USERB.USERB_PROCEDURE TO USERA

Я знаю, что это очень старый вопрос, но я надеюсь, что смогу немного его отколоть.

person JustinC    schedule 14.12.2017

SQL> grant create any procedure to testdb;

Это команда, когда мы хотим предоставить привилегию создания пользователю «testdb».

person Raj Sharma    schedule 07.12.2015