개주 훈련일지/📚 코살대 교본 학습

SQL) DCL (Data Control Language)

lshfood2 2026. 2. 9. 21:04

[ DCL ]

DCL은 특정 사용자의 권한을

제어할 수 있는 명령어이다.

(Data Control Language)

 

데이터의 보호와 보안을 위해서

DCL을 통해 유저의 권한을 관리하는데

권한을 줄 때는 GRANT문을 사용하고

권한을 회수 할 때는 REVOKE문을 사용한다.

 

DCL은 DDL문의 일종으로서 커밋 혹은

롤백이 필요없이 실행하는 순간 적용된다.


[ 오라클에서 제공하는 계정 ]

오라클 DBMS를 설치하면 기본적으로

생성되어 있는 계정은 아래 3개가 대표적이다.

사용자 계정 설명
SCOTT 테스트용 샘플 유저
SYS DBA 권한을 부여받은 최상위 유저
(DB 생성과 제거 가능)
SYSTEM DBA 권한을 부여받은 유저
(DB 생성과 제거는 불가능)

 

SQL*Plus 기준 예시

SYSTEM 계정으로 접속해서

새 사용자 계정 생성

→ 권한 부여

→ 접속 테스트

→ 접속 종료

-- 1) SQL*Plus 접속 (OS 명령 예시)
Windows: cmd / PowerShell
sqlplus system/비밀번호@서비스명

-- 예: 로컬 XE 많이 쓰는 케이스
sqlplus system/비밀번호@localhost:1521/XEPDB1
-- 또는
sqlplus system/비밀번호@XE


-- 2) SYSTEM으로 접속된 상태에서 새 사용자 생성
-- (사용자명/비번은 예시)
CREATE USER app_user IDENTIFIED BY app1234;

-- 3) 테이블 같은 객체 만들 공간(기본 테이블스페이스) 부여
-- 실습용으로 USERS를 자주 사용
ALTER USER app_user DEFAULT TABLESPACE USERS;

-- 4) USERS 테이블스페이스에 쓸 수 있는 용량(쿼터) 부여
ALTER USER app_user QUOTA UNLIMITED ON USERS;

-- 5) 접속 권한 부여
GRANT CREATE SESSION TO app_user;

-- 6) 객체 생성 권한 부여
GRANT CREATE TABLE TO app_user;
GRANT CREATE VIEW TO app_user;
GRANT CREATE SEQUENCE TO app_user;
GRANT CREATE PROCEDURE TO app_user;

-- (주의) 아래처럼 DBA 롤을 주면 실습은 편하지만 권한이 너무 큼
-- GRANT DBA TO app_user;

-- 7) SYSTEM 접속 종료
EXIT;

 

새로 만든 사용자로 '접속 테스트 → 종료' 예시

-- 8) 새 사용자로 SQL*Plus 접속
sqlplus app_user/app1234@localhost:1521/XEPDB1

-- 9) 접속 확인 (현재 사용자)
SHOW USER;

-- 10) 접속 종료
EXIT;

[ 테이블 권한 주기와 권한 회수]

계정이 소유한 테이블 권한을 줄 수 있는 GRANT와

권한을 회수하는 REVOKE는 아래와 같이 사용할 수 있다. 

 

SYSTEM 계정으로 접속 후 권한 부여 (GRANT)

-- SYSTEM으로 접속했다고 가정
sqlplus system/비밀번호@서비스명

-- 예시 상황
-- 테이블 소유자: APP_OWNER
-- 권한 받을 사용자: APP_USER
-- 대상 테이블: APP_OWNER.BOARD

-- 테이블 DML 권한 부여(조회/입력/수정/삭제)
GRANT SELECT, INSERT, UPDATE, DELETE
ON app_owner.board
TO app_user;

-- 컬럼 단위 UPDATE 권한 부여
GRANT UPDATE(title, content)
ON app_owner.board
TO app_user;

 

권한 회수(REVOKE)

-- 테이블 DML 권한 회수
REVOKE SELECT, INSERT, UPDATE, DELETE
ON app_owner.board
FROM app_user;

-- 컬럼 단위 UPDATE 권한 회수
REVOKE UPDATE(title, content)
ON app_owner.board
FROM app_user;

[ ROLE을 이용한 권한 부여 ]

DBA는 여러 권한들의 집합인 ROLE을

생성하고 ROLE에 각종 권한을 부여한 후,

해당 ROLE을 다른 유저에게 부여할 수 있다.

 

DBA는 ROLE을 사용자 계정에게 부여함으로써

ROLE이 가지고 있는 권한들을 사용자들에게

신속하고 정확하게 부여할 수 있게 된다.

 

ROLE '생성/부여' 와 '회수/삭제' 예시

-- (예시)
-- ROLE 이름: app_dml_role
-- 테이블 소유자: APP_OWNER
-- 권한 받을 사용자: APP_USER
-- 대상 테이블: APP_OWNER.BOARD

-- 1) ROLE 생성 (DBA/SYSTEM에서 실행)
CREATE ROLE app_dml_role;

-- 2) ROLE에 권한 부여 (테이블 DML 권한 예시)
GRANT SELECT, INSERT, UPDATE, DELETE
ON app_owner.board
TO app_dml_role;

-- 3) 사용자에게 ROLE 부여
GRANT app_dml_role TO app_user;

-- 사용자에게서 ROLE 회수
REVOKE app_dml_role FROM app_user;

-- ROLE 자체 삭제 (더 이상 안 쓰면)
DROP ROLE app_dml_role;

[ 오라클 DBMS에서 일반적으로 부여하는 ROLE ]

오라클 DBMS는 기본적으로

다양한 ROLE을 가지고 있다.

 

이러한 ROLE 중에서 일반 사용자에게

권한을 주는 대표적인 ROLE에는

CONNECT와 RESOURCE가 있다.

 

대표적인 ROLE

ROLE명 부여 권한
CONNECT CREATE SESSION
RESOURCE CREATE CLUSTER
CREATE PROCEDURE
CREATE TYPE
CREATE SEQUENCE
CREATE TRIGGER
CREATE OPERATOR
CREATE TABLE
CREATE INDEXTYPE

'개주 훈련일지 > 📚 코살대 교본 학습' 카테고리의 다른 글

디자인 패턴  (0) 2026.02.11
아키텍처 스타일  (0) 2026.02.10
아키텍처 기초  (0) 2026.02.09
SQL) 윈도우 함수  (0) 2026.02.08
컴포넌트 구성 원리  (0) 2026.02.07