DCL: 권한 부여·회수와 Role
시스템 권한·객체 권한·Role을 구분하고 GRANT·REVOKE 및 WITH ADMIN/GRANT OPTION의 전파 차이를 이해합니다.
핵심 요약
DCL(Data Control Language)은 데이터베이스 사용자에게 권한을 부여하거나 회수하는 명령입니다. 권한은 데이터베이스 작업 자체를 허용하는 시스템 권한, 특정 객체에 대한 작업을 허용하는 객체 권한, 여러 권한을 묶은 Role로 구분합니다.
권한 구분
| 구분 | 예 | 대상 |
|---|---|---|
| 시스템 권한 | CREATE SESSION, CREATE TABLE | 데이터베이스 수준 작업 |
| 객체 권한 | SELECT, INSERT, UPDATE, DELETE | 특정 테이블·뷰 등 |
| Role | app_reader, app_writer | 여러 권한의 묶음 |
시스템 권한
SQL코드 영역 안에서 좌우로 이동할 수 있습니다.
GRANT CREATE SESSION, CREATE TABLE TO app_user;
REVOKE CREATE TABLE FROM app_user;
WITH ADMIN OPTION으로 시스템 권한을 받은 사용자는 그 권한을 다른 사용자에게 부여하거나 회수할 수 있습니다.
SQL코드 영역 안에서 좌우로 이동할 수 있습니다.
GRANT CREATE SESSION TO team_lead WITH ADMIN OPTION;
객체 권한
SQL코드 영역 안에서 좌우로 이동할 수 있습니다.
GRANT SELECT, INSERT ON hr.employee TO app_user;
REVOKE INSERT ON hr.employee FROM app_user;
WITH GRANT OPTION으로 객체 권한을 받은 사용자는 같은 객체 권한을 다른 사용자에게 다시 부여할 수 있습니다.
SQL코드 영역 안에서 좌우로 이동할 수 있습니다.
GRANT SELECT ON hr.employee
TO report_owner
WITH GRANT OPTION;
WITH ADMIN OPTION과 WITH GRANT OPTION은 대상 권한 종류와 회수 전파 규칙이 다르므로 같은 옵션으로 외우지 않습니다.
Role
SQL코드 영역 안에서 좌우로 이동할 수 있습니다.
CREATE ROLE app_reader;
GRANT SELECT ON hr.employee TO app_reader;
GRANT SELECT ON hr.department TO app_reader;
GRANT app_reader TO app_user;
Role은 권한 관리를 단순하게 하지만, Oracle의 저장 PL/SQL 객체 컴파일처럼 Role을 통한 권한만으로 충분하지 않고 직접 객체 권한이 필요한 경우가 있습니다. 시험에서는 직접 부여와 Role 부여를 구분합니다.
권한과 객체 소유권
다른 Schema의 객체를 조회하려면 일반적으로 객체 권한이 필요합니다.
SQL코드 영역 안에서 좌우로 이동할 수 있습니다.
SELECT *
FROM hr.employee;
Synonym을 만들었다고 객체 권한이 생기는 것은 아닙니다.
시험 판단 기준
- 무엇을 할 권한인지 먼저 시스템 권한과 객체 권한으로 나눕니다.
- 권한을 직접 받은 것인지 Role로 받은 것인지 확인합니다.
- 다른 사용자에게 다시 부여할 수 있는 옵션인지 확인합니다.
REVOKE의 영향은 권한 종류와 부여 경로를 기준으로 판단합니다.- 객체 이름 접근 편의와 실제 접근 권한을 혼동하지 않습니다.
복습 문제
CREATE TABLE과SELECT ON hr.employee는 각각 어떤 권한인가?WITH ADMIN OPTION과WITH GRANT OPTION의 적용 대상 차이는 무엇인가?- Synonym이 있어도 객체 권한이 별도로 필요한 이유는 무엇인가?