DCL

이민경·2024년 3월 12일

DB

목록 보기
3/8

📘 DCL(Data Control Language)

데이터를 다루기 위한 권한을 다루는 언어

  • 계정에 DB, DB 객체에 대한 접근 권한을 부여(GRANT)하고 회수(REVOKE)하는 언어

📖 권한의 종류

1) 시스템 권한 : DB접속, 객체 생성 권한

  • CRETAE SESSION : 데이터베이스 접속 권한
  • CREATE TABLE : 테이블 생성 권한
  • CREATE VIEW : 뷰 생성 권한
  • CREATE SEQUENCE : 시퀀스 생성 권한
  • CREATE PROCEDURE : 함수(프로시져) 생성 권한
  • CREATE USER : 사용자(계정) 생성 권한
  • DROP USER : 사용자(계정) 삭제 권한
  • DROP ANY TABLE : 임의 테이블 삭제 권한

2) 객체 권한 : 특정 객체를 조작할 수 있는 권한

📖 USER - 계정(사용자)

관리자 계정
◾ 데이터베이스의 생성과 관리를 담당하는 계정.
◾ 모든 권한과 책임을 가지는 계정.
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 사용자명
profile
풀스택 개발자

0개의 댓글