YandexDirect

14 июня 2018

Как выдать право на выполнение объектов схемы другого пользователя

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

Допустим у нас есть пользователь user_tt у которого имеются следующие права

системные привилегии:


GRANTEE PRIVILEGE ADMIN_OPTION

USER_TT CREATE PROCEDURE NO

USER_TT CREATE SESSION NO




роли:



GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE

USER_TT CONNECT NO YES

у пользователя user_tt создадим процедуру:



SQL> create or replace procedure p as begin dbms_output.put_line( 'моя новая процедура' ); end;

2 /

Procedure created

select object_name, object_type, status from dba_objects where owner = 'USER_TT';

OBJECT_NAME OBJECT_TYPE STATUS

P PROCEDURE VALID

Есть второй пользователь user_tt2 с правами

системные привилегии:


GRANTEE PRIVILEGE ADMIN_OPTION

USER_TT2 CREATE TABLE NO


USER_TT2 CREATE SESSION NO

Для того, чтобы пользователь user_tt2 смог выполнить процедуру их схемы user_tt необходимо дать право 


SQL> alter user user_tt grant connect through user_tt2;

User altered

и войти под пользователем user_tt2[user_tt] -- т.е. в квадратных скобках указать пользователя "через" которого выполняется вход.


SQL> connect user_tt2[user_tt]

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0

Connected as user_tt2[user_tt]@TEST12

попробуем выполнить процедуру:


Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 

Connected as user_tt2[user_tt]@TEST12

SQL> exec user_tt.p;

PL/SQL procedure successfully completed


SQL> create or replace procedure p as begin dbms_output.put_line( 'моя новая процедура 2' ); end;

2 /

Procedure created


SQL> sho user


User is "user_tt2[user_tt]"


Вот и все что я хотел вам рассказать.


Комментариев нет:

Отправить комментарий

Общее·количество·просмотров·страницы