Предоставление прав на хранимую процедуру другому пользователю Oracle
-
29-09-2019 - |
Вопрос
Я студент бакалавриата, и я сталкиваюсь с небольшой проблемой в предоставлении прав собственности пользователю 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».