Oracle/Admin

2012.01.27 Admin 8일차(4) (Role)

에몽이ㅋ 2012. 1. 29. 02:23
참조사이트 : 
http://www.oracleclub.com/lecture/1010  (오라클클럽)
http://gyh214.tistory.com/66 


Role : Privilege 들을 일일히 주기 귀찮으니까 묶어서 만들어 놓고, 상황에 맞게 부여하는 묶음권한
특징 :
- ROLE을 이용하면 권한 부여와 회수를 쉽게 할 수 있다.
- ROLE은 CREATE ROLE권한을 가진 USER에 의해서 생성 된다.
- 한 사용자가 여러개의 ROLL을 ACCESS할 수 있고, 여러 사용자에게 같은 ROLE을 부여할 수 있다.
- 시스템 권한을 부여하고, 취소할 때와 동일한 명령을 사용하여 사용자에게 부여하고, 취소 한다.
- 사용자는 ROLE에 ROLE을 부여할 수 있다.
- 오라클 데이터베이스를 설치하면 기본적으로 CONNECT, RESOURCE, DBA ROLE이 제공 된다.

ROLE을 사용하지 않고 권한부여ROLE을 사용하여 권한부여
롤사용하지않고권한부여 롤사용하여권한부여

ROLE관련 데이터 사전


데이터 사전

설 명

ROLE_SYS_PRIVS

ROLE에 부여된 시스템 권한

ROLE_TAB_PRIVS

ROLE에 부여된 테이블 권한

USER_ROLE_PRIVS

현재 사용자가 ACCESS할 수 있는 ROLE

USER_TAB_PRIVS_MADE

현재 사용자의 객체에 부여한 객체 권한

USER_TAB_PRIVS_RECD

현재 사용자의 객체에 부여된 객체 권한

USER_COL_PRIVS_MADE

현재 사용자 객체의 특정 컬럼에 부여한 객체 권한

USER_COL_PRIVS_RECD

현재 사용자 객체의 특정 컬럼에 부여된 객체 권한

DBA_ROLES

어떠한 Role Predefine되어있는지 보는 사전

DBA_ROLE_PRIVS

Roles grated to users and roles

SESSION_ROLES

Roles that the user currently has enabled

DBA_SYS_PRIVS

System Privs grated to usrs and roles



딕셔너리 이용예시

1) 어떤 Role이 미리 만들어져 있는지 확인하고,
그 중 DBA는 어떠한 Privilege(권한)을 가지고 있는지 조사하고 싶다.


어떠한 Role이 미리 만들어져 있을까?(DBA_ROLES이용)
 SQL> select * from dba_roles;

ROLE                           PASSWORD
------------------------------ --------
CONNECT                        NO
RESOURCE                       NO
DBA                            NO
SELECT_CATALOG_ROLE            NO
EXECUTE_CATALOG_ROLE           NO
DELETE_CATALOG_ROLE            NO
EXP_FULL_DATABASE              NO
IMP_FULL_DATABASE              NO
........
AUTHENTICATEDUSER              NO
XDBWEBSERVICES                 NO
OLAPI_TRACE_USER               NO
OLAP_DBA                       NO
CWM_USER                       NO
OLAP_USER                      NO
MGMT_USER                      NO

35 rows selected.
DBA role이 존재함을 확인
이제는 DBA role에 어떠한 System Privilege가 들어있는지 확인하자.(role_sys_privs 딕셔너리 이용)
 SQL> desc role_sys_privs;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ROLE                                      NOT NULL VARCHAR2(30)
 PRIVILEGE                                 NOT NULL VARCHAR2(40)
 ADMIN_OPTION                                       VARCHAR2(3)


SQL> select * from role_sys_privs
  2  where role='DBA';

ROLE                           PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
DBA                            CHANGE NOTIFICATION                      YES
DBA                            ADMINISTER ANY SQL TUNING SET            YES
DBA                            ALTER ANY SQL PROFILE                    YES
DBA                            CREATE RULE                              YES
DBA                            EXPORT FULL DATABASE                     YES
........................
DBA                            CREATE MATERIALIZED VIEW                 YES
DBA                            CREATE PUBLIC DATABASE LINK              YES
DBA                            CREATE DATABASE LINK                     YES
DBA                            CREATE ANY SYNONYM                       YES
DBA                            ALTER ANY CLUSTER                        YES
DBA                            DROP USER                                YES
DBA                            MANAGE TABLESPACE                        YES

160 rows selected.

2) scott user는 어떤 권한을 가지고 있을까?(dba_sys_privs 이용)
select * from dba_sys_privs
where grantee='SCOTT';

GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
SCOTT                          UNLIMITED TABLESPACE                     NO
 
2-1) 나는(SCOTT) 어떤 권한을 가지고 있을까?(user_sys_privs 이용)
SQL> conn scott/tiger
Connected.
SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
SCOTT                          UNLIMITED TABLESPACE                     NO
 

Role 생성방법
  문법)
     CREATE ROLE role [NOT IDENTIFIED | IDENTIFIED]
        (BY password | EXTERNALLY]

 * NOT IDENTIFIED : 롤 활성화 시 암호에 의한 검증 과정 생략
 * IDENTIFIED : 롤 활성화 시 암호에 의한 검증 과정 활성화
 * BY password : 롤 활성화 시 사용되는 암호 지정
 * EXTERNALLY : 롤 활성화 시 운영체제 인증을 통한 사용자 검증

Role에 권한 부여하기(추가하기)
   1) 롤에 시스템 권한 부여
     SQL> GRANT create session TO hr_MGR;
   
   2) 롤에 객체 권한 부여
     SQL> GRANT select, insert, delete ON hr_clerk;

사용자에게 롤 부여하기
   1) 사용자와 롤에게 특정 롤 부여하기
     SQL> GRANT role1 TO user1 [WITH ADMIN OPTION];
     SQL> GRANT role1 TO role2;

롤 삭제하기
*DROP ANT ROLE 권한을 가진 사용자만 사용가능
DROP ROLE role_name;

사용자로부터 롤 뻇기 
* GRANT ANY ROLE 권한을 가진 사용자만 사용가능
REVOKE role_name FROM scott;


디폴트 롤 지정하기(DBA용)
ALTER USER scott
    DEFAULT ROLE role_name, role_name2;
(role_name, role_name2 만 쓰고 나머지는 disable)

ALTER USER scott DEFAULT ROLE ALL;
(현재 부여된 롤들 다 사용)
   
ALTER USER scott DEFAULT ROLE ALL EXCEPT hr_clerk;
(hr_clerk 롤만 뺴고 다 사용)

ALTRE USER scott DEFAULT ROLE NONE;
(롤 사용하지 않음)

현재 자기에게 부여된 롤을 Enable, Disable하기(일반 user용)
* Default Role들은 로그인시 자동으로 Enable
* 사용자가 임시적으로 role을 Revoke하기 위해서도 사용함

SET ROLE hr_clerk;
SET ROLE or_clerk IDENTIFIED BY order;
(Role에 password가 부여된 경우에는 password를 쳐줘야 해당 Role이 사용자에게 적용)
SET ROLE ALL EXCEPT oe_clerk;