Предоставление прав на хранимую процедуру другому пользователю 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".