권한부여 1 5 1,957

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]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입