생계/Oracle2018. 5. 31. 14:17

A 유저가 B 유저의  한 테이블을 truncate 할수 있게 만들어 주려면 어떤권한이 필요할까?

 

grant truncate on B."테이블명" to A 

 

이런 구문이 가능하다면 문제는 해결되겠지만 ... truncate 권한만을 따로 줄수가 없다.

 

grant drop any table to A 

 

이렇게 하면 A 유저가 B 유저의 테이블을 truncate 할수 있다. 

하지만 한 테이블의 truncate 를 가능하게 하기 위해서 너무나 큰 권한을 주었다. 

 

프로시저를 활용해서 drop any table 권한을 주지 않고도 

A 유저가 B 유저의 테이블을 truncate 하게 만들수 있다. 

 

 

create user u_obj identified by uobj;      -- table owner user

grant create session to u_obj;

grant resource to u_obj;

 

create table u_obj.t_trc ( a int);             -- truncate 대상 테이블

 

create user u_trc identified by utrc;       -- truncate 하려는 user

grant create session to u_trc;

grant select, insert on u_obj.t_trc to u_trc;

 

-- truncate 해줄 프로시져 작성 

create or replace procedure u_obj.p_trc( p_tname in varchar2 ) 

as 

begin 

execute immediate 'truncate table ' || p_tname; 

end; 

/

 

이 상태에서 u_trc 는 t_trc 테이블을 truncate 할수 없지만 프로시저를 

실행함으로써 가능하게 할수 있다. 

 

 

 

 

 

 

반응형
Posted by 돌고래트레이너