# 5장 DCL/TCL

## 1. DCL(Data Control Language)

* Data에 **접근하기 위한 권한을 통제**하는 언어
* Grant를 통해 계정별권한을 부여한다
  * GRANT 권한명1, 권한명2 TO 사용자명1, 사용자명2
* Revoke를 통해 계정별 권한을 회수 한다.
  * REVOKE 권한명1, 권한명2 ON 객체명 FROM 사용자1,사용자2

### 권한 종류

* 부여할 수 있는 권한에는 크게 시스템 권한과 객체 권한이 존재한다.

1. 시스템 권한
   1. 데이터베이스의 **특정 객체에 접근**할 수 있는 권한으로 시스템 권한을 부여시 관리자권한이 필요하다.
   2. CREATE TABLE, CREATE VIEW, CREATE USER 등
2. 객체 권한
   1. 특정 **테이블/뷰**에 대한 작업권한으로, 특정 테이블, 뷰등을 제어하기 위한 목적으로 부여하는 권한
   2. SELECT ON 테이블명, INSERT ON 테이블명
3. ROLE 권한
   1. 다양한 권한을 하나의 이름으로 그룹화한 권한.
   2. 일반적으로 다양한 권한을 사용자에게 일일이 부여하기 힘드므로, 공통권한들을 ROLE로 묶은 후 , ROLE권한을 사용자에게 부여한다.
   3. CONNECT, RESOURCE, DBA가 대표적인 롤 권한들.

#### WITH GRANT OPTION

* **권한 전파** 허용 옵션
* 계정에 권한을 부여하면서 , 다른 사용자에게 그 권한을 **재부여 할 수 있도록 허용**하는 옵션
* <mark style="color:purple;">GRANT SELECT ON</mark> EMPLOYEE <mark style="color:purple;">TO</mark> C##KH <mark style="color:purple;">WITH GRANT</mark> OPTION

### 최소 권한 원칙(Principle of Least Privilege)

* 사용자는 업무를 수행하는데 있어서 필**요한 최소한의 권한만을 가져야 한다**는 규칙
* 즉, 불피요한 권한을 부여하지 말라는 것.
* 일반 개발자가 DBA(데이터베이스 전체 관리 권한)을 가지게 된다면, 회사 DB전체를 날려버릴 수 도 있음.

## 2. TCL(Transation Control Language)

* 트랜잭션 제어 언어
* 트랜젝션 제어를 통해 데이터베이스의 무결성을 유지할 수 있다.

### 1) Transaction

* Transaction은DataBase의 논리적 작업 단위를 의미한다.
* DataBase는 관리하는 테이블의 데이터가 **변경(insert/update/delete)**&#xB418;는 경우,  오라클은 이 변경사항들을 데이터베이스에 즉시 반영하지 않고, **하나의 트랜잭션**에 모아서 관리해 두다가, TCL문에 의해 모아둔 전체 변경사항들(트랜잭션)이 **반영(COMMIT)되거나, 취소(ROLLBACK)**&#xB41C;다.
* 트랜잭션에는 ALL OR NOTING개념이 반영되어 있다.
  * ALL OR NOTING : 트랜잭션의 변경사항은 모두 성공하거나, 모두 실패해야 한다.

### 2) ACID(Atomicity Consistency Isoltaion Durability)

* 트랜젝션의 특징을 나타내는 단어.

#### ① Atomicity(원자성)

* 원자란 **더 이상 나눌 수 없는** 물질의 기본단위를 의미한다.
* 트랙젝션이 원자성을 지난다 함은, 트랜잭션이  **더 이상 쪼개지지 않는 최소 단위**라는 의미.
* 트랜잭션내부의 변경사항들은 쪼개서 부분적인 COMMIT, ROLLBACK을 할 수 없으므로 **원자성의** 특징을 가졌다.
* EX 1) EMPLOYEE테이블에 10번의 INSERT문이 실행되었다고 가정했을 때 9개는 COMMIT, 1개는 ROLLBACK 등의 행위가 불가능하다는 것.

#### ② Consistency(일관성)

* 트랜잭션이 완료된 데이터는 항상 **일관성** 있게 DB가 정의한 제약조건을 만족해야 한다.
  * **일관성** : 데이터가 일관된 상태를 유지하는 특성.
* 데이터베이스의 구조에 문제가 없었는데 트랜잭션의 수행결과로 문제가 생길 수 없다는 것.
* 즉, 트랜잭션의 결과로 데이터베이스의 객체구조의 일관성이 깨지지 않으므로, 트랜잭션은 일관성의 특징을 가졌다.
* EX) NUMBER만 들어가야 하는 칼럼에 트랜잭션 후 VARCHAR2,DATE가 들어가는 일은 있을 수 없다.

#### ③ Isolation(격리성)

* 서로 다른 세션에서 동시에 실행되는 트랜잭션은 **서로 간섭하지 않아야 하고, 독립적으로 처리**되어야 한다는 특징.
* 여러 트랜잭션이 동시에 실행될 경우 각 트랜잭션은 , 다른 트랜잭션의 **중간 결과**에 영향을 받지 않으 므로 격리성의 특징을 가졌다.
* 오라클은 서로다른 세션에서는 기본적으로 **커밋된 데이터만 READ**가 가능하다.

#### ④  Durability(지속성)

* 한번 반영된 트랜잭션은 Database에 영구히 반영되므로 지속성의 특징을 가졌다.<br>

### 3) TCL의  주요 명령어

* **COMMIT**
  * 트랜잭션을 확정하여 변경사항을 데이터베이스에 **영구 저장**하는 명령어
* **ROLLBACK**
  * 트랜잭션을 취소하여 변경사항을 **이전으로 되돌**리는 명령어
* **SAVEPOINT**
  * 트랜잭션 내부에 중간 저장 지점을 설정하는 명령어
* **ROLLBACK TO SAVEPOINT**
  * SAVEPOINT지점 이후의 변경사항들만 부분취소하는 명령어
