위로 아래

ROLE

  1. 여러 USER가 이용하는 데이터베이스 SYSTEM에서 매번 USER에게 각각의 권한을 부여하는 일은 비효율적
  2. ROLE은 권한의 집합으로, USER GROUP별로 적합한 권한을 부여하고 회수할 수 있다.
  3. SYSTEM으로 들어가서 권한을 주어야 한다.
  4. sqlplus에서 처음에 권한을 부여하던
create user c##scott identified by tiger; : 계정은 scott, 비밀번호는 1234로 유저 생성
grant resource, connect to c##scott;  : 권한 부여

여기에서 resourec와 connect가 ROLE이다.

 

 

 


ROLE 명령어 

-- ROLE 생성
CREATE ROLE 이름

-- ROLE 생성 확인
SELECT * FROM DBA_ROLES
WHERE ROLE = 'MANAGER1';

-- ROLE에 권한 부여
GRANT CREATE SESSION,
CREATE TABLE,
CREATE VIEW
TO MANAGER1;

-- 유저에게 ROLE 부여
CREATE USER USER01 IDENTIFIED BY 1234;
CREATE USER USER02 IDENTIFIED BY 1234;
GRANT MANAGER1 TO USER01, USER02;

-- 자신의 권한을 다른 사용자에게도 부여할 수 있도록 권한 부여
GRANT CREATE USER TO HAKSA WITH ADMIN OPTION;

--권한 회수
REVOKE CREATE USER FROM HAKSA;

 

 

 

ROLE 예시

-- 실습) CREATE TABLE, CREATE VIEW 권한을 포함하는 MANAGER라는 ROLE을 만들어서
-- 그 업무에 종사하는 종업원인 USER01과 USER02에게 부여

ALTER SESSION SET "_ORACLE_SCRIPT" = true;

--ROLE을 생성
CREATE ROLE MANAGER1;

--ROLE의 생성 확인(DBA_ROLES)라는 DATA DICTIONARY를 검색
SELECT * FROM DBA_ROLES
WHERE ROLE = 'MANAGER1';

--MANAGER1 ROLE에게 CREATE SESSION, CREATE TABLE, CREATE VIEW 주기
GRANT CREATE SESSION,
CREATE TABLE,
CREATE VIEW
TO MANAGER1;

--USER에게 ROLE을 부여
CREATE USER USER01 IDENTIFIED BY 1234;
CREATE USER USER02 IDENTIFIED BY 1234;
GRANT MANAGER1 TO USER01, USER02;

--USER01로 접속하여 MANAGER1 ROLE을 제대로 부여 받았는지 확인
--SELECT * FROM USER_ROLE_PRIVS;

 

 

 


ROLE 확인

--롤의 확인

--모든 시스템 롤을 확인할 수 있다
SELECT * FROM DBA_ROLES;

--ROLE에게 부여된 시스템 권한을 확인할 수 있다
SELECT * FROM ROLE_SYS_PRIVS; 

--ROLE에게 부여된 객체 권한 확인할 수 있다
SELECT * FROM ROLE_TAB_PRIVS;

--현재 사용자에게 부여된 롤에 대해 확인할 수 있다
SELECT * FROM USER_ROLE_PRIVS;

--사용자에게 부여한 객체 권한을 확인할 수 있다.
SELECT * FROM USER_TAB_PRIVS_MADE;

--사용자가 부여받은 객체 권한을 확인
SELECT * FROM USER_COL_PRIVS_RECD;

 

예시

--문제) EMP 테이블과 관련된 모든 권한의 종류 확인
SELECT * FROM ALL_TAB_PRIVS WHERE TABLE_NAME='EMP';

--문제) USER02와 HAKSA가 부여받은 권한의 종류를 확인
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE IN('USER02','HAKSA');

 

 


종합 예제

--문제) 성적관리 업무를 개발하기 위해 데이터베이스 사용자를 생성하고자 한다.
-- 사용자 이름은 HAKSA, 패스워드는 HAKSA123인 사용자를 생성하시오.
CREATE USER HAKSA IDENTIFIED BY HAKSA123;

--문제2) DEF_ROLE을 생성하여 사용자에게 부여하시오.
CREATE ROLE DEF_ROLE;

--문제3) DEF_ROLE에 CREATE SESSION을 부여
GRANT CREATE SESSION
TO DEF_ROLE;

ALTER USER HAKSA IDENTIFIED BY HAKSA123;

--문제4) 사용자 HAKSA에게 DEF_ROLE라는 롤을 부여
GRANT DEF_ROLE
TO HAKSA;

--문제5) 사용자 HAKSA로 데이터베이스 접속하기

--문제6) C##SCOTT의 EMP 테이블을 사용자 HAKSA가 SELECT 할 수 있도록 권한 부여
-- C##SCOTT에 접속해서 HAKSA에게 권한 부여
-- GRANT SELECT ON emp TO HAKSA;

--문제7) C##SCOTT의 dept 테이블을 사용자 HAKSA가 SELECT 할 수 있는 권한 부여
-- SYSTEM에서 HAKSA에게 권한 부여 (시스템 권한을 가지면 DBA 다음으로 높으므로 다른 사용자 것을 다룰 수 있다)
GRANT SELECT ON C##SCOTT.dept TO HAKSA;

--문제8) HAKSA에서 SELECT 해보기. emp와 dept
-- HAKSA에 접속해서 다음을 수행
SELECT * FROM C##SCOTT.EMP;
SELECT * FROM C##SCOTT.DEPT;