사용자를 개발자 계정, 운영자 예정 등으로 분리하라는 요청이 있습니다.
GRANT 부여를 해야하는데 효과적 방법이 있는지 궁금합니다.
가령 USER_A, USER_B 계정이 있을 시
USER_A 스키마에 소속된 모든 테이블에 대한 CRUD 권한을 USER_B 에게 주려고 합니다.
ALL_TABLES 이용해서 테이블마다 GRANT를 부여하는 방식은 알고 있습니다만 이 경우 테이블이 추가되거나 하면 같은 작업을 계속 해줘야해서 꽤 번거럽습니다.
좀 더 효과적인 방법이 있는지 궁금합니다.
role 를 만들고, grant 를 스케쥴 걸어 (1시간 마다 ?) 자동수행되게 해 주면 되겠네요 그럼 신규 USER-A 에 table 이 생기면 1시간이 지나면 USER-B 가 권한을 갖게 되겠네요 oracle DB 가 없어서, 메모장에서 작성했습니다. sql 에 오타는 수정해서 사용하세요 -- USER-A 에 대한 DML 권한을 할당할 ROLE 을 생성 create role RL_USER-A_DML ; -- USER-B 가 "RL_USER-A_DML" 권한을 가지도록 권한할당 grant RL_USER-A_DML to USER-B ; -- 아래의 sh 문장을 생성 : 수행되면 USER-A 의 table 에 대한 DML 권한을 "RL_USER-A_DML" 할당 # cat ext_grant_priv_to_role.sh sqlplus -s id/passwd@sid << EOF set linesize 적당히 set pagesize 적당히 set heading off set pagesize 0 set echo off set feedback off 등등을 적당히... spool ext_grant_priv_to_role.sql select 'grant select, insert, update, delete on '||owner||'.'||table_name||',' to RL_USER-A_DML ; ' from dba_objects where owner = 'USER-A' and object_type = 'TABLE' ; order by 1,2 ; spool off exit EOF sqlplus -s id/passwd@sid << EOF @ ext_grant_priv_to_role.sql ; exit EOF -- 위 sh 수행결과를 crontab 에 넣어서 자동 정기수행 # crontab -l */60 * * * * /usr/shell/ext_grant_priv_to_role.sh >> /usr/log/ext_grant_priv_to_role.log 2>&1