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로 접속해 주세요.
(1) 기본식 : ROLE 생성 방법
롤A를 생성하는 방법은 다음을 실행하는 것입니다.
(2) 기본식 : ROLE에 권한 할당
롤A에 1개 이상의 권한 X, Y, ...를 할당합니다.
(3) 사용자에 ROLE 부여
사용자 계정 K에 롤A(+에 포함된 권한X, 권한Y, ...)를 부여합니다.
(4) 사용자의 ROLE 확인
사용자K가 어떤 롤을 가지고 있는지 조회합니다.
* 이 때, 사용자이름K는 반드시 대문자로 입력해 주세요.
(5) ROLE에 포함된 권한 확인
롤A에 포함된 권한 X, Y, ...를 조회합니다.
(6) ROLE 해제
사용자 계정 K에게 부여된 롤A를 회수합니다. 롤A와 그 안에 포함되어 있었던 권한이 회수(해제, 취소)됩니다.
(7) ROLE 삭제
롤A를 삭제합니다.
* 이하의 예제에서는 임의로 생성한 사용자 계정인 ANDREA를 사용합니다.
2. 예제 : ROLE의 생성과 부여, 회수, 삭제
먼저 명령 프롬프트(cmd)를 열어, 다음을 실행합니다.
1) ROLE 생성 : 임의의 롤 'sampriole01' 생성하기
cmd창에 아래의 소스코드를 입력 후 실행합니다.

'롤이 생성되었습니다' 라는 메시지가 나타나면, samprole01 롤이 만들어진 것입니다.
2) ROLE에 권한 할당 : 'samprole01' 롤에 CREATE SESSION, CREATE TABLE, INSERT ANY TABLE 권한 할당하기
GRANT CREATE를 이용하여, samprole01 롤에 3개의 권한을 할당합니다.

'권한이 부여되었습니다' 라는 메시지가 나타나면, samprole01 롤에 3개의 권한이 잘 할당된 것입니다.
3) 사용자에 ROLE 부여 : andrea 계정에 samprole01 롤 부여하기
롤을 사용자 계정에 부여하는 경우에도 GRANT 를 사용합니다.

andrea 계정에 samprole01 롤의 권한들이 부여되었습니다.
4) 사용자의 ROLE 확인 : andrea 계정에 부여된 롤 확인하기
dba_role_privs라는 데이터 딕셔너리(레퍼런스)를 사용하면 andrea 계정이 가진 롤을 확인할 수 있습니다.
단, 이 때 grantee 다음의 계정 이름은 꼭 "대문자"로 작성해야 합니다.
(* 소문자로 계정 이름을 입력할 경우, '레코드가 없다'는 식의 답변을 받을 수 있습니다.)

- GRANTEE : 사용자 계정
- GRANTED_ROLE : 사용자 계정에 부여된 롤 이름
andrea 계정에 samprole01 롤이 잘 부여되어 있는 것을 확인했습니다.
5) ROLE에 포함된 권한 확인하기
롤에 포함된 권한을 확인할 때도 데이터 딕셔너리를 씁니다. 이번에는 dba_sys_privs 를 사용하는데, grantee에 롤 이름을 입력해야 합니다.
단, 이 때 grantee 다음의 계정 이름은 꼭 "대문자"로 작성해야 합니다.
(* 소문자로 계정 이름을 입력할 경우, '레코드가 없다'는 식의 답변을 받을 수 있습니다.)

samprole01 롤에 부여된 권한(PRIVILEGE)들이 나타났습니다. '예제1)'에서 부여한 3개의 권한이 조회되고 있습니다.
6) ROLE 해제 : andrea 계정에 부여된 samprole01 권한을 해제하기
권한 해제는 'REVOKE" 를 사용합니다.

'권한이 취소되었습니다' 메시지가 나타난다면, andrea 계정에게 부여된 samprole01 롤의 권한들을 취소(회수, 해제)시킨 것입니다.
7) 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
'새싹 DBA > Oracle' 카테고리의 다른 글
오라클 ADRCI 정의 및 사용법 (1) | 2024.05.30 |
---|---|
[오라클] DB 아키텍처 구축 (0) | 2024.05.20 |
[오라클] Table Space (0) | 2024.04.19 |
[Oracle] SID 와 Service_Name의 차이와 설정방법 (0) | 2024.04.18 |
[Oracle] 오라클 DB 링크와 사용법 (0) | 2024.04.18 |