2010-11-29 2 views
8

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

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

ответ

20

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

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

GRANT EXECUTE ON b.procedure_name TO 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; 
4

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

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

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

EDIT:

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

GRANT EXECUTE ON b.procedure_name TO a; 
+1

+1 Менее решительный подход, чем СОЗДАТЬ ЛЮБОЙ ПРОЦЕДУРОЙ, но также и с ловушками - предоставить приложение, используя пользователя B, для пользователя A, позволяющего им войти в систему как пользователь. Похоже, вы хотели бы предоставить привилегии уровня схемы, но они недоступны в Oracle. – 2010-11-29 19:06:41

0

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

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

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

умалчиваемых «Invoker права против Definer право» имеет больше информации http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575

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

0
SQL> grant create any procedure to testdb; 

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

1

На вашем счету 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

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