1. Role의 장점 - grant 횟수를 줄일 수 있다. - 동적인 privilege 관리가 가능하다. - privilege를 enable, disable 할 수 있다. - OS를 통해서 grant를 줄 수 있다. - cascade revoke가 필요 없다. - performance 를 증가 시킨다. 2. Role을 만들어서 사용하는 절차
1) role을 만든다. 2) privilege 를 role에 grant 한다. 3) role을 user에게 grant 한다. 3. CREATE ROLE
SQL> CREATE ROLE sales_clerk ; SQL> CREATE ROLE hr_clerk 2 IDENTIFIED BY bonus ; --> role을 enable 할 때, password를 bonus로 입력하게 한다. SQL> CREATE ROLE hr_manager 2 IDENTIFIED EXTERNAL ; --> user의 OS 정보를 보고 확인한다. * role은 만들어지면 자동 enable 된다. 4. 오라클에 기본적으로 미리 생성된 roles
CONNECT RESOURCE DBA : WITH ADMIN OPTION을 포함한 모든 system 권한을 주낟. EXP_FULL_DATABASE : DB export 권한을 준다. IMP_FULL_DATABASE : DB import 권한을 준다. DELETE_CATALOG_ROLE : data dictionary table의 delete 권한을 준다. EXECUTE_CATALOG_ROLE : data dictionary package의 execute 권한을 준다. SELECT_CATALOG_ROLE : data dictionary table의 select 권한을 준다. 5. ALTER ROLE
SQL> ALTER ROLE sales_clerk 2 IDENTIFIED BY commission ; --> role에 commission 이라는 password를 걸어 준다. SQL> ALTER ROLE hr_clerk 2 IDENTIFIED EXTERNALLY ; --> user의 OS 정보를 체크하게 한다. SQL> ALTER ROLE hr_manager 2 NOT IDENTIFIED ; --> role에 걸려있는 password 없애기 6. Role assign 하기
SQL> GRANT sales_clerk TO scott ; --> scott에게 sales_clerk role을 부여한다. SQL> GRANT hr_clerk TO hr_manager ; --> hr_manager role에 hr_clerk role을 부여한다. SQL> GRANT hr_manager TO scott 2 WITH ADMIN OPTION ; --> scott 에게 hr_manager role을 부여하면서 다른 사람에게 이 role을 줄 권한도 준다. 7. DEFAULT ROLE - 접속했을때 enable할 role을 지정한다. - dba 권한이다. - ALTER USER 할때만 가능하다. SQL> ALTER USER scott 2 DEFAULT ROLE hr_clerk, sales_clerk ; --> 현재 갖고 있는 role 중에서 hr_clerk, sales_clerk role만 enable 시킨다. SQL> ALTER USER scott DEFAULT ROLE ALL ; --> 부여된 모든 role을 enable 시킨다. SQL> ALTER USER scott DEFAULT ROLE ALL 2 EXCEPT hr_clerk ; --> hr_clerk role을 제외한 모든 role을 enable 시킨다. SQL> ALTER USER scott DEFAULT ROLE NONE ; --> 부여된 모든 role을 disable 시킨다. 8. 현재 접속한 user가 자신의 role을 enable 만들기
SQL> SET ROLE sales_clerk 2 IDENTIFIED BY commission ; --> sales_clerk에 commission이라는 password를 체크하고, enable 시킨다. SQL> SET ROLE hr_clerk ; --> 부여된 role 중에 hr_clerk만 enable 시킨다. SQL> SET ROLE ALL EXCEPT sales_clerk ; --> 부여된 role 중에서 sales_clerk 를 제외한 모든 role을 enable 시킨다. SQL> SET ROLE NONE ; --> 부여된 모든 role을 disable 시킨다. SQL> SET ROLE ALL ; --> 부여된 모든 role을 enable 시킨다. 9. ROLL 권한 빼앗기
SQL> REVOKE sales_clerk FROM scott ; --> scott에게 있는 sales_clerk role을 제거한다. SQL> REVOKE hr_manager FROM PUBLIC ; --> 모든 user에게서 hr_manager role의 권한을 없앤다. [syntax] REVOKE role [,role]... FROM {user | role | PUBLIC} [, {user | role | PUBLIC} ]... 10. ROLE 제거하기
DROP ROLE hr_manager ; 11. Role 정보를 갖고 있는 data dictionary
DBA_ROLES : All roles which exist in the database DBA_ROLE_PRIVS : Roles granted to users and roles ROLE_ROLE_PRIVS : Roles which are granted to roles DBA_SYS_PRIVS : System privileges granted to users and roles ROLE_SYS_PRIVS : System privileges granted to roles ROLE_TAB_PRIVS : Table privileges granted to roles SESSION_ROLES : Roles which the user currently has enabled SVRMGR> SELECT role, password_required 2 FROM dba_roles ;
[ Lab ]
1. RESOUCE role에 부여되어 있는 시스템 권한을 나열하십시오. $ sqlplus system/manager SQL> select * from dba_sys_privs where grantee='RESOURCE' ;
2. Role을 생성하여, user에게 default role로 부여해 보십시오. SQL> connect system/manager SQL> grant create table, create view to dev ;
SQL> connect scott/tiger SQL> grant select on emp to dev ;
SQL> connect system/manager SQL> grant dev, resource to bob ; SQL> select * from dba_role_privs 2 where grantee='BOB' ; SQL> alter user bob default role resoure ; SQL> connect bob/oracle SQL> select * from session_roles ; SQL> select * from scott.emp ; ==> error 발생 확인!!! SQL> set role all ; SQL> select * from session_roles ; SQL> select * from scott.emp ; |