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

StackOverflow https://stackoverflow.com/questions/4305323

Вопрос

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

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

Это было полезно?

Решение

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

Если пользователь 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 должен иметь привилегию создания любой процедуры. Изменить любую процедуру и отбросить любую процедуру - это другие применимые привилегии, необходимые для изменения или падения пользователей процедуры для пользователя B. Все широкие привилегии являются широкими привилегиями, поскольку он не ограничивает пользователя B к любой конкретной схеме. Пользователь B должен быть очень доверен, если предоставлен эти привилегии.

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

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

GRANT EXECUTE ON b.procedure_name TO a;

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

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

Если вы предпочитаете, что пакет должен выполняться с использованием разрешений вызова пользователя, то при создании пакета необходимо указать Attry Curret_user

Oracle Documentation «INVOOKE PRALES VS ДЕЯТЕЛЬНОСТИ ДЕЯТЕЛЬНОСТИ» имеет больше информации http://docs.orcle.com/cd/a97630_01/appdev.920/a96624/08_subs.htm#18575.

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

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

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

SQL> grant create any procedure to testdb;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top