데이터를 다루기 위한 권한을 다루는 언어
- 계정에 DB, DB 객체에 대한 접근 권한을 부여(GRANT)하고 회수(REVOKE)하는 언어
1) 시스템 권한 : DB접속, 객체 생성 권한
- CRETAE SESSION : 데이터베이스 접속 권한
- CREATE TABLE : 테이블 생성 권한
- CREATE VIEW : 뷰 생성 권한
- CREATE SEQUENCE : 시퀀스 생성 권한
- CREATE PROCEDURE : 함수(프로시져) 생성 권한
- CREATE USER : 사용자(계정) 생성 권한
- DROP USER : 사용자(계정) 삭제 권한
- DROP ANY TABLE : 임의 테이블 삭제 권한
2) 객체 권한 : 특정 객체를 조작할 수 있는 권한

✔ 관리자 계정
◾ 데이터베이스의 생성과 관리를 담당하는 계정.
◾ 모든 권한과 책임을 가지는 계정.
ex) sys(최고관리자), system(sys에서 권한 몇개 제외된 관리자)
✔ 사용자 계정
◾ 데이터베이스에 대하여 질의, 갱신, 보고서 작성 등의 작업을 수행할 수 있는 계정으로 업무에 필요한 최소한의 권한만을 가지는 것을 원칙으로 한다.
ex) kh_bdh계정(각자 이니셜 계정), workbook 등
GRANT RESOURCE, CONNECT TO kh_lmk;
✔ 롤 (ROLE)
: 다수 사용자와 다양한 권한을 효율적으로 관리하기 위하여 서로 관련된 권한을 그룹화한 개념(권한의 묶음)
SELECT * FROM ROLE_SYS_PRIVS
WHERE ROLE = 'RESOURCE';
ROLE_SYS_PRIVS❓
오라클 DB에서 시스템 권한을 가진 역할을 나타내는 데이터 딕셔너리 뷰를 말한다.

SELECT * FROM ROLE_SYS_PRIVS
WHERE ROLE = 'CONNECT';

➡ CREATE 트리거, 시퀀스, 테이블 등 8가지 권한이 부여되어있음
👩💻 계정 생성 방법에 대해서 알아보자!
✔ 1. (SYS)사용자 계정 생성
ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE;
▶ 예전 SQL 방식 허용 (계정명을 간단히 작성 가능)📑 작성법 CREATE USER 사용자명 IDENTIFIED BY 비밀번호; CREATE USER lmk_sample IDENTIFIED BY sample1234;✔ 2. 새 연결 추가 (❗❗ 오류발생)
🤷♀️ ORA-01045: 사용자 LMK_SAMPLE는 CREATE SESSION 권한을 가지고있지 않음로그온이 거절되었습니다
❌오류 발생이유? 접속 권한 (CREATE SESSION) 없어서 !✔ 3. 접속 권한 부여
📑 권한 부여 작성법 GRANT CREATE SESSION, 권한, 권한 ... TO 사용자명; GRANT CREATE SESSION TO lmk_sample;✔ 4. 다시 연결 추가 📣 성공
✔ 5. (sample)테이블 생성
<CREATE TABLE TB_TEST( PK_COL NUMBER PRIMARY KEY, CONTENT VARCHAR2(100) ); ORA-01031: 권한이 불충분합니다 ▶ CREATE TABLE : 테이블 생성 권한 (+) 데이터를 저장할 수 있는 공간(TABLESPACE) 할당✔ 6. (SYS) 테이블 생성권한 + TABLESPACE 할당
GRANT CREATE TABLE TO lmk_sample; ALTER USER lmk_sample DEFAULT TABLESPACE SYSTEM QUOTA UNLIMITED ON SYSTEM;▶ sample 계정의 설정을 변경하여 해당 사용자가 system 테이블 스페이스에서 무제한으로 공간을 사용할 수 있도록 변경함.
✔ 7. (sample) 다시 테이블 생성
<CREATE TABLE TB_TEST( PK_COL NUMBER PRIMARY KEY, CONTENT VARCHAR2(100) );◾ (SYS)sample 계정에 CONNECT, RESOURCE 부여
GRANT CONNECT, RESOURCE TO lmk_sample;💡 여기서 잠깐!
CONNECT ❓ DB 접속 관련 권한을 묶어둔 ROLE
RESOURCE ❓ DB 사용을 위한 기본 객체 생성 권한을 묶어둔 ROLE
사용자 계정끼리(kh_lmk / lmk_sample) 서로 객체 접근 권한 부여하는 방법에 대해서 알아보자💡
1. (sample) kh_lmk 계정의 EMPLOYEE 테이블 조회
SELECT * FROM kh_lmk.EMPLOYEE; -- ORA-00942: 테이블 또는 뷰가 존재하지 않습니다 --> 접근 권한이 없어서 조회 불가2. (kh_lmk) sample 계정에 EMPLOYEE 테이블 조회 권한 부여
✔ 객체 권한 부여 방법
GRANT 객체권한 ON 객체명 TO 사용자명;GRANT SELECT ON EMPLOYEE TO lmk_sample;3. (sample) 다시 EMPLOYEE 조회
SELECT * FROM kh_lmk.EMPLOYEE;4. (kh_lmk) sample 계정에 부여한 EMPLOYEE 테이블 조회 권한 회수 (REVOKE)
📑 권한 회수 작성법
REVOKE 객체권한 ON 객체명 FROM 사용자명;REVOKE SELECT ON EMPLOYEE FROM lmk_sample;5. (sample) 권한 회수 확인
SELECT * FROM kh_lmk.EMPLOYEE; -- ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
✍ 시험보기 전 DCL 다시 정리해보기!
<계정 추가하고 접속 권한을 부여하는 방법>
<계정을 추가하는 방법>
CREATE USER 사용자명 IDENTIFIED BY 비밀번호!
<접속 권한을 부여하는 방법>
GRANT CREATE SESSION TO (권한을 줄 계정의) 사용자명!
<테이블을 생성할 권한을 부여하는 방법>
GRANT CREATE TABLE TO 사용자명
그리고
<해당 사용자가 무제한으로 공간을 사용할 수 있는 권한을 제공하는 방법>
ALTER USER 사용자계정 DEFAULT TABLESPACE
SYSTEM QUOTA UNLIMITED ON SYSTEM;
<계정에 CONNECT, RESOURCE 부여하기!>
CONNECT는 접속 관련 권한을 묶어둔 ROLE이며,
RESOURCE은 사용을 위한 기본 객체 생성 권한을 묶어둔 ROLE이다.
GRANT CONNECT, RESOURSE TO 사용자계정명
<객체에 권한을 부여하는 방법>
<sample계정에 있는 EMPLOYEE 테이블을 kh_cmh 계정을 통해 조회해보기>
SELECT * FROM kh_cmh.EMPLOYEE;
---> 조회 시 존재하지 않는다고 오류가 발생하는데, 접근할 수 있는 권한이 없기에 조회가 불가능하다.
따라서, sample계정에서 객체에 권한을 부여해줘야함!
<테이블 조회 권한을 부여하는 방법>
GRANT 객체 권한 (여기서는 SELECT임! SELECT 문이기에!) ON 객체명!
(해당구문에서는 테이블명이 해당된다.) EMPLOYEE TO 사용자명!
객체 권한을 회수하는 방법은 뭐가 있을까?!
REVOKE 를 사용하면 된다.
<객체 권한 회수 작성법!>
REVOKE (객체권한)SELECT ON (객체명=테이블명)EMPLOYEE FROM 사용자명