2과목 · SQL 기본 및 활용·4장
DCL (GRANT / REVOKE)
DCL의 역할, 권한·롤, GRANT/REVOKE 문법, WITH GRANT OPTION의 전파와 회수 규칙을 다룹니다.
1. DCL이란
DCL(Data Control Language) 은 데이터베이스 객체에 대한 권한을 부여·회수 하는 언어입니다. GRANT와 REVOKE 두 명령으로 구성됩니다.
2. 권한의 종류
시스템 권한 (System Privilege)
DB 전역에서 동작할 수 있는 능력.
CREATE TABLE,CREATE SESSION,CREATE VIEW,DROP ANY TABLE...
객체 권한 (Object Privilege)
특정 객체(테이블·뷰·시퀀스 등)에 대한 동작 허용.
SELECT,INSERT,UPDATE,DELETE,EXECUTE(프로시저),REFERENCES(FK 설정)
3. GRANT — 권한 부여
기본 문법
GRANT 권한목록 ON 대상 TO 사용자_또는_롤 [WITH GRANT OPTION];
예시
-- user1에게 emp 테이블 조회/삽입 허용
GRANT SELECT, INSERT ON emp TO user1;
-- 모든 테이블에 SELECT (시스템 권한)
GRANT SELECT ANY TABLE TO audit_role;
-- user1이 user2에게 다시 권한을 넘겨줄 수 있게
GRANT SELECT ON emp TO user1 WITH GRANT OPTION;
WITH GRANT OPTION
수신자가 같은 권한을 제3자에게 다시 부여할 수 있게 하는 옵션. 권한 전파가 일어나므로 회수 시 주의가 필요합니다.
4. REVOKE — 권한 회수
REVOKE INSERT ON emp FROM user1;
WITH GRANT OPTION으로 전파된 권한의 회수
A가 B에게 GRANT ... WITH GRANT OPTION을 주었고, B가 다시 C에게 권한을 부여했다면:
- A가 B에게서 권한을 회수하면, B → C 체인까지 연쇄적으로 회수됩니다(Cascade Revoke).
-- A 세션
GRANT SELECT ON emp TO user1 WITH GRANT OPTION;
-- user1 세션
GRANT SELECT ON emp TO user2;
-- 다시 A 세션
REVOKE SELECT ON emp FROM user1;
-- 이 시점 user2의 SELECT 권한도 함께 사라짐
5. 롤 (ROLE)
권한의 묶음. 사용자에게 개별 권한을 주는 대신 롤을 부여해서 관리를 단순화합니다.
CREATE ROLE analyst;
GRANT SELECT, INSERT ON emp TO analyst;
GRANT analyst TO user1; -- user1이 analyst의 권한을 상속
REVOKE analyst FROM user1;
롤의 장점
- 권한 변경이 한 곳에서 이뤄짐 → 수십 명의 사용자에게 일괄 반영.
- 팀 역할 단위로 권한 추적이 쉬움.
6. 사용자와 스키마
Oracle에서 스키마 = 사용자. CREATE USER 로 사용자를 만들면 동명의 스키마가 생성됩니다. 객체 권한의 대상은 보통 스키마명.객체명 형식으로 표기합니다.
GRANT SELECT ON hr.emp TO user1; -- hr 스키마의 emp 테이블 조회 권한
7. 자주 출제되는 포인트
GRANT는 권한 부여,REVOKE는 권한 회수.- WITH GRANT OPTION은 권한 전파를 허용하며, 회수 시 Cascade 된다.
- REVOKE는 객체를 삭제하지 않는다 (권한만 회수). 전형적 오답: "REVOKE는 객체를 삭제한다" → 틀림.
- 시스템 권한(전역 능력) vs 객체 권한(특정 대상) 구분.
- 롤로 권한을 묶어 관리하는 것이 권장.
8. 요약 체크리스트
- 시스템 권한과 객체 권한을 구분할 수 있다.
- GRANT / REVOKE 문법을 작성할 수 있다.
- WITH GRANT OPTION의 전파와 회수 연쇄를 설명할 수 있다.
- 롤을 사용해 권한을 묶는 방법을 설명할 수 있다.