새싹 DBA/Oracle

[오라클/SQL] ROLE(롤) : 권한 그룹 관리 - 롤 생성, 롤 부여, 롤 회수, 롤 삭제 방법 (feat. GRANT)

LIMMI 2024. 5. 14. 15:22

1. ROLE의 이해와 사용 방법

1) ROLE의 개념과 그 필요성

오라클 SQL 에서의 ROLE(롤, 역할)이란, 여러개의 권한을 그룹으로 묶은 권한의 묶음입니다. 여러 개의 권한 그룹을 만들 수 있습니다. 어떤 권한을 행사할 수 있느냐가 모여서 역할이 됩니다.

ROLE을 사용자에게 부여하면, ROLE에 속한 권한들을 한꺼번에 사용자 계정에 부여하거나 회수할 수 있습니다. 따라서, 자주 사용하거나 필수적인 권한들은 ROLE로 설정하면 작업 시간을 단축할 수 있습니다.

2) ROLE(롤)을 사용자 계정에 부여하는 과정

(1) ROLE 생성 (CREATE ROLE)

(2) ROLE에 권한 할당 (GRANT)

(3) 사용자에 ROLE 부여 (GRANT)

(4) 사용자에게 부여된 ROLE 확인 (데이터 익셔너리 dba_role_privs 사용)

* 참고 : 이하부터는 ROLE 과 관련된 작업을 명령 프롬프트(cmd) 창에서 진행합니다.

만약 오라클 SQL 디벨로퍼 내에서, 일반적인 상태의 scott 연습계정에서 롤 생성(CREATE ROLE)을 시도할 경우, 다음의 오류가 발생합니다.

명령의 1 행에서 시작하는 중 오류 발생 -

create role samprole01

오류 보고 -

ORA-01031: 권한이 불충분합니다

01031. 00000 - "insufficient privileges"

*Cause: An attempt was made to perform a database operation without

the necessary privileges.

*Action: Ask your database administrator or designated security

administrator to grant you the necessary privileges

 

3) ROLE(롤) 생성, 부여, 확인, 회수, 삭제 방법

먼저 명령 프롬프트(cmd) 창에서 sqlplus / as sysdba로 접속해 주세요.

sqlplus / as sysdba

(1) 기본식 : ROLE 생성 방법

롤A를 생성하는 방법은 다음을 실행하는 것입니다.

create role 롤이름A;

(2) 기본식 : ROLE에 권한 할당

롤A에 1개 이상의 권한 X, Y, ...를 할당합니다.

grant 권한이름X, 권한이름Y, ... to 롤이름A;

(3) 사용자에 ROLE 부여

사용자 계정 K에 롤A(+에 포함된 권한X, 권한Y, ...)를 부여합니다.

grant 역할이름A to 사용자이름K;

(4) 사용자의 ROLE 확인

사용자K가 어떤 롤을 가지고 있는지 조회합니다.

* 이 때, 사용자이름K는 반드시 대문자로 입력해 주세요.

select * from dba_role_privs where grantee='사용자이름K';

(5) ROLE에 포함된 권한 확인

롤A에 포함된 권한 X, Y, ...를 조회합니다.

select * from dba_sys_privs where grantee='롤이름A';

(6) ROLE 해제

사용자 계정 K에게 부여된 롤A를 회수합니다. 롤A와 그 안에 포함되어 있었던 권한이 회수(해제, 취소)됩니다.

revoke 롤이름A from 사용자이름K;

(7) ROLE 삭제

롤A를 삭제합니다.

drop role 롤이름A;

* 이하의 예제에서는 임의로 생성한 사용자 계정인 ANDREA를 사용합니다.

2. 예제 : ROLE의 생성과 부여, 회수, 삭제

먼저 명령 프롬프트(cmd)를 열어, 다음을 실행합니다.

sqlplus / as sysdba

1) ROLE 생성 : 임의의 롤 'sampriole01' 생성하기

cmd창에 아래의 소스코드를 입력 후 실행합니다.

create role samprole01;
 

'롤이 생성되었습니다' 라는 메시지가 나타나면, samprole01 롤이 만들어진 것입니다.

2) ROLE에 권한 할당 : 'samprole01' 롤에 CREATE SESSION, CREATE TABLE, INSERT ANY TABLE 권한 할당하기

GRANT CREATE를 이용하여, samprole01 롤에 3개의 권한을 할당합니다.

grant create session, create table, insert any table to samprole01;

'권한이 부여되었습니다' 라는 메시지가 나타나면, samprole01 롤에 3개의 권한이 잘 할당된 것입니다.

3) 사용자에 ROLE 부여 : andrea 계정에 samprole01 롤 부여하기

롤을 사용자 계정에 부여하는 경우에도 GRANT 를 사용합니다.

grant samprole01 to andrea;

andrea 계정에 samprole01 롤의 권한들이 부여되었습니다.

4) 사용자의 ROLE 확인 : andrea 계정에 부여된 롤 확인하기

dba_role_privs라는 데이터 딕셔너리(레퍼런스)를 사용하면 andrea 계정이 가진 롤을 확인할 수 있습니다.

단, 이 때 grantee 다음의 계정 이름은 꼭 "대문자"로 작성해야 합니다.

(* 소문자로 계정 이름을 입력할 경우, '레코드가 없다'는 식의 답변을 받을 수 있습니다.)

select * from dba_role_privs where grantee='ANDREA';

- GRANTEE : 사용자 계정

- GRANTED_ROLE : 사용자 계정에 부여된 롤 이름

andrea 계정에 samprole01 롤이 잘 부여되어 있는 것을 확인했습니다.

5) ROLE에 포함된 권한 확인하기

롤에 포함된 권한을 확인할 때도 데이터 딕셔너리를 씁니다. 이번에는 dba_sys_privs 를 사용하는데, grantee에 롤 이름을 입력해야 합니다.

단, 이 때 grantee 다음의 계정 이름은 꼭 "대문자"로 작성해야 합니다.

(* 소문자로 계정 이름을 입력할 경우, '레코드가 없다'는 식의 답변을 받을 수 있습니다.)

select * from dba_sys_privs where grantee='SAMPROLE01';

samprole01 롤에 부여된 권한(PRIVILEGE)들이 나타났습니다. '예제1)'에서 부여한 3개의 권한이 조회되고 있습니다.

6) ROLE 해제 : andrea 계정에 부여된 samprole01 권한을 해제하기

권한 해제는 'REVOKE" 를 사용합니다.

revoke samprole01 from andrea;

'권한이 취소되었습니다' 메시지가 나타난다면, andrea 계정에게 부여된 samprole01 롤의 권한들을 취소(회수, 해제)시킨 것입니다.

7) ROLE 삭제

samprole01 롤을 삭제합니다.

drop role samprole01;

samprole01이 삭제되었습니다.

* 참고하면 좋은 이전 페이지 :

GRANT (1) : 사용자 계정에 시스템 관련 각종 권한 부여

https://blog.naver.com/regenesis90/222210064560

GRANT (2) : 테이블 편집권한 부여

https://blog.naver.com/regenesis90/222211070929

REVOKE : 사용자 권한 해제

https://blog.naver.com/regenesis90/222211113556

출처 : https://m.blog.naver.com/regenesis90/222212492620