DCL·권한 관리 완벽 정리
SQLD 시험 출제 범위의 GRANT·REVOKE와 시스템/객체 권한, ROLE을 구문 예시와 함께 정리
1. DCL 개요
DCL이란?
DCL(Data Control Language)은 데이터베이스 접근 권한을 부여하거나 회수하는 SQL 명령어입니다. 데이터의 보안, 무결성, 병행 제어를 위해 사용합니다. DCL도 DDL처럼 AUTO COMMIT됩니다.
DCL 명령어
| 명령어 | 설명 |
|---|---|
| GRANT | 사용자에게 권한 부여 |
| REVOKE | 사용자로부터 권한 회수 |
2. 권한의 종류
시스템 권한 vs 객체 권한
| 구분 | 시스템 권한 | 객체 권한 |
|---|---|---|
| 대상 | 데이터베이스 전체 | 특정 객체(테이블, 뷰 등) |
| 부여자 | DBA (관리자) | 객체 소유자 또는 권한 보유자 |
| 예시 | CREATE TABLE, CREATE SESSION | SELECT, INSERT, UPDATE, DELETE |
| 전달 옵션 | WITH ADMIN OPTION | WITH GRANT OPTION |
주요 시스템 권한
| 권한 | 설명 |
|---|---|
| CREATE SESSION | DB 접속 권한 |
| CREATE TABLE | 테이블 생성 권한 |
| CREATE VIEW | 뷰 생성 권한 |
| CREATE PROCEDURE | 프로시저 생성 권한 |
| CREATE USER | 사용자 생성 권한 |
주요 객체 권한
| 권한 | TABLE | VIEW | PROCEDURE |
|---|---|---|---|
| SELECT | O | O | - |
| INSERT | O | O | - |
| UPDATE | O | O | - |
| DELETE | O | O | - |
| ALTER | O | - | - |
| EXECUTE | - | - | O |
3. GRANT (권한 부여)
시스템 권한 부여
GRANT CREATE SESSION, CREATE TABLE
TO USER1
[WITH ADMIN OPTION];
WITH ADMIN OPTION: 부여받은 권한을 다른 사용자에게 다시 부여할 수 있음
객체 권한 부여
GRANT SELECT, INSERT
ON SCHEMA1.EMP
TO USER2
[WITH GRANT OPTION];
WITH GRANT OPTION: 부여받은 객체 권한을 다른 사용자에게 다시 부여할 수 있음
WITH ADMIN OPTION vs WITH GRANT OPTION
| 항목 | WITH ADMIN OPTION | WITH GRANT OPTION |
|---|---|---|
| 적용 대상 | 시스템 권한 | 객체 권한 |
| 권한 전파 | 다른 사용자에게 재부여 가능 | 다른 사용자에게 재부여 가능 |
| 회수 시 연쇄 | 연쇄 회수 안됨 (A→B→C에서 A 회수해도 B,C 유지) | 연쇄 회수됨 (A→B→C에서 A 회수 시 B,C도 회수) |
연쇄 회수(CASCADE) 여부가 시험의 핵심 포인트입니다!
4. REVOKE (권한 회수)
시스템 권한 회수
REVOKE CREATE TABLE
FROM USER1;
객체 권한 회수
REVOKE SELECT, INSERT
ON SCHEMA1.EMP
FROM USER2;
연쇄 회수 예시
DBA가 USER_A에게 WITH GRANT OPTION으로 SELECT 권한을 부여하고, USER_A가 USER_B에게, USER_B가 USER_C에게 재부여한 경우:
-- 객체 권한 (WITH GRANT OPTION)
DBA → USER_A → USER_B → USER_C
REVOKE FROM USER_A → USER_B, USER_C도 함께 회수
-- 시스템 권한 (WITH ADMIN OPTION)
DBA → USER_A → USER_B → USER_C
REVOKE FROM USER_A → USER_B, USER_C는 유지
5. ROLE (역할)
ROLE이란?
ROLE은 관련 권한을 묶어서 관리하는 권한의 집합입니다. 여러 권한을 개별적으로 부여하는 대신 ROLE에 권한을 할당하고, ROLE을 사용자에게 부여하면 관리가 편리해집니다.
ROLE 생성 및 사용
-- 1. ROLE 생성
CREATE ROLE MANAGER_ROLE;
-- 2. ROLE에 권한 부여
GRANT CREATE TABLE, CREATE VIEW TO MANAGER_ROLE;
GRANT SELECT, INSERT ON EMP TO MANAGER_ROLE;
-- 3. 사용자에게 ROLE 부여
GRANT MANAGER_ROLE TO USER1, USER2, USER3;
-- 4. ROLE 회수
REVOKE MANAGER_ROLE FROM USER1;
Oracle 기본 제공 ROLE
| ROLE | 포함 권한 |
|---|---|
| CONNECT | CREATE SESSION (DB 접속 권한) |
| RESOURCE | CREATE TABLE, CREATE SEQUENCE, CREATE PROCEDURE 등 |
| DBA | 모든 시스템 권한 (관리자용) |
일반적으로 새 사용자에게 CONNECT + RESOURCE ROLE을 부여합니다.
ROLE의 장점
- 1. 권한 관리 간소화 — 개별 사용자 대신 ROLE 단위로 관리
- 2. 일괄 변경 용이 — ROLE의 권한 변경 시 모든 할당 사용자에 반영
- 3. ROLE 중첩 가능 — ROLE에 다른 ROLE을 부여할 수 있음
- 4. 동적 권한 관리 — SET ROLE로 세션 중 활성/비활성 전환 가능
6. 시험 빈출 포인트
반드시 알아야 할 포인트
- 1. GRANT ... TO / REVOKE ... FROM — 부여는 TO, 회수는 FROM 사용
- 2. WITH GRANT OPTION은 연쇄 회수 — 객체 권한은 REVOKE 시 전파된 권한도 함께 회수
- 3. WITH ADMIN OPTION은 연쇄 회수 안됨 — 시스템 권한은 REVOKE 시 전파된 권한이 유지
- 4. DCL은 AUTO COMMIT — GRANT/REVOKE 실행 시 즉시 커밋 (이전 미커밋 DML도 함께)
- 5. 객체 권한에는 ON 절 필수 — GRANT SELECT ON 테이블명 TO 사용자
- 6. CONNECT = CREATE SESSION — Oracle 10g부터 CONNECT 롤에는 CREATE SESSION만 포함
- 7. ROLE은 권한의 묶음 — ROLE 자체는 권한이 아니라 권한의 집합
- 8. PUBLIC에게 권한 부여 — GRANT ... TO PUBLIC은 모든 사용자에게 부여
개념을 확인했다면 문제로 실력을 검증해보세요