Предоставление прав на хранимую процедуру другому пользователю Oracle - PullRequest
9 голосов
/ 29 ноября 2010

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

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

Ответы [ 5 ]

26 голосов
/ 29 ноября 2010

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

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

GRANT EXECUTE ON b.procedure_name TO a

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

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

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

CREATE SYNONYM procedure_name FOR b.procedure_name;

BEGIN
  procedure_name( <<list of parameters>> );
END;
6 голосов
/ 29 ноября 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;
1 голос
/ 14 декабря 2017

В вашей учетной записи DBA дайте 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

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

1 голос
/ 27 октября 2014

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

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

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

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

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

0 голосов
/ 07 декабря 2015
SQL> grant create any procedure to testdb;

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

...