[Oracle] 32.롤 권한 제어


롤이란?



롤은 사용자에게 보다 효율적으로 권한을 부여할 수 있도록 여러 개의 권한을 묶어 놓은 것이라고 생각하면 됩니다.

데이터베이스의 접속 권한(CREATE SESSION), 테이블 생성 권한(CREATE TABLE), 테이블 수정(UPDATE), 삭제(DELETE), 조회(SELECT) 등과 같은 권한은

사용자에게 기본적으로 필요한 권한들인데 사용자를 생성할 때마다 일일이 이러한 권한을 부여하는 것은 번거롭습니다.

롤을 이용하면 다수의 사용자에게 공통적으로 필요한 권한들을 롤에 하나의 그룹으로 묶어두고 ,

사용자에게는 특정 롤에 대한 권한 부여를 함으로서 간단하게 권한 부여를 할 수 있습니다.



사전 정의된 롤의 종류



사전 정의된 시스템에서 제공해주는 롤은 CONNECT 롤, RESOURECE 롤, DBA 롤이 있습니다.


  • CONNECT 롤



사용자가 데이터베이스에 접속 가능하도록 하기 위해서 가장 기본적인 시스템 권한 8가지를 묶어 놓음


-- CONNECT 롤
-- Release 9.0 버전

ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION,

CREATE SYNONYM, CREATE TABLE, CREATE VIEW

-- Release 11.2 버전

CREATE SESSION





  • RESOURCE 롤



사용자가 객체(테이블, 뷰, 인덱스)를 생성할 수 있도록 하기 위해서 시스템 권한을 묶어 놓음


CREATE CLUSTER, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER





  • DBA 롤



사용자들이 소유한 데이터베이스 객체를 관리하고 사용자들을 작성하고 변경하고 제거할 수 있도록 하는 모든 권한을 가짐

즉, 시스템 자원을 무제한적으로 사용하며 시스템 관리에 필요한 모든 권한을 부여할 수 있는 강력한 권한을 보유한 롤





롤 부여하기



롤은 다음과 같이 부여합니다.


--SYSTEM 계정

GRANT connect,resource TO user01;



유저를 생성하면 일반적으로 CONNECT, RESOURCE롤을 부여 합니다!

한 번 제대로 부여됬는지 확인해볼까요?? user01 계정에서 다음과 같이 입력합니다!


--user01 계정

SELECT * 
FROM user_role_privs;




image



롤과 관련된 데이터 딕셔너리는 무수히 많습니다!


image




--user01 계정
--CONNECT,RESOURCE 롤에 해당하는 시스템 권한(Release 11.2 버전)

SELECT
    *
FROM
    role_sys_privs;




image





사용자 정의 롤



사용자 정의 롤은 다음과 같은 순서로 생성되고 권한 부여됩니다.


image



1.롤을 생성합니다.(SYS 계정)


--SYS 계정

CREATE ROLE user_role;




2.롤에게 권한부여(객체 소유자 또는 SYS 계정)


--SYS 계정

GRANT CREATE USER TO user_role;




-- HR 계정

GRANT SELECT ON employees TO user_role;
GRANT DELETE ON employees TO user_role;
GRANT UPDATE ON employees TO user_role;
GRANT INSERT ON employees TO user_role;




3.사용자에게 롤 권한 부여 (SYS 계정)


--SYS 계정

GRANT user_role to user01;



한 번 제대로 권한이 주어졌나 user01에서 확인해보겠습니다!


--user01 계정

SELECT
    *
FROM
    role_sys_privs;




image




--user01 계정

SELECT
    *
FROM
    role_tab_privs;




image



롤을 부여받음으로써 시스템권한과 테이블권한도 제대로 부여받았음을 확인할 수 있습니다!

권한을 사용하려면 롤을 활성화시켜야합니다.


--user01 계정

SET ROLE user_role;



그러면 user01에서 다음과 같은 명령을 사용할 수 있습니다.


--user01 계정

CREATE user user02 identified by 1234;

SELECT
    *
FROM
    hr.employees;