Так уж заведено, что в нашей базе данных разработчики работают под разными схемами, редактируют пакеты, функции и процедуры. Для того, чтобы не выдавать пароль от каждой схемы или не давать привилегию ANY, можно поступить следующим образом:
Допустим у нас есть пользователь user_tt у которого имеются следующие права
системные привилегии:
Допустим у нас есть пользователь 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]"
Вот и все что я хотел вам рассказать.
Комментариев нет:
Отправить комментарий