권한부여 1 5 1,876

by 구경꾼 [DB 기타] GRANT [2022.07.07 11:29:24]


사용자를 개발자 계정, 운영자 예정 등으로 분리하라는 요청이 있습니다.

GRANT 부여를 해야하는데 효과적 방법이 있는지 궁금합니다.

가령 USER_A, USER_B 계정이 있을 시

USER_A 스키마에 소속된 모든 테이블에 대한 CRUD 권한을 USER_B 에게 주려고 합니다.

ALL_TABLES 이용해서 테이블마다 GRANT를 부여하는 방식은 알고 있습니다만 이 경우 테이블이 추가되거나 하면 같은 작업을 계속 해줘야해서 꽤 번거럽습니다.

좀 더 효과적인 방법이 있는지 궁금합니다.

by 우리집아찌 [2022.07.07 11:47:56]

보통 ROLE 만들어서 권한 부여하지 않나요? 


by 구경꾼 [2022.07.07 12:12:34]

ROLE은 여러 종류의 권한을 묶어서 정의할 경우 효과적이고

저는 여러 객체에 권한을 부여하고자 하는 경우이므로 좀 다릅니다.


by 포동푸우 [2022.07.07 13:19:08]

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 



by pajama [2022.07.07 14:01:24]

좋은 아이디어네요.. 어느 DB든 활용할 수 있겠네요. 참고하겠습니다~~


by 구경꾼 [2022.07.07 21:21:34]

개발 시점에 적용하기는 좋겠네요

업무에 참고하겠습니다.

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입