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

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

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

5 ответов


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

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

GRANT EXECUTE ON b.procedure_name TO a

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

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

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

CREATE SYNONYM procedure_name FOR b.procedure_name;

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

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

единственные привилегии, которые вы можете предоставить процедурам, - это выполнение и отладка.

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

изменить:

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

GRANT EXECUTE ON b.procedure_name TO a;

на вашей учетной записи DBA дайте USERB право создать процедуру с помощью grant 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

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


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

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

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

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

надеюсь, что это помогает.


SQL> grant create any procedure to testdb;

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