SQL: DCL

김기현·2025년 6월 18일

Database

목록 보기
20/24

DCL(Data Control Language)는 데이터베이스에서 접근 권한을 관리하고 보안을 유지하기 위한 SQL이다.
누가 어떤 데이터에 읽기/쓰기/변경/삭제 권한을 가지는지를 설정하거나 회수할 때 사용하는 명령어이다.

DCL 명령어

명령어설명
GRANT사용자에게 권한을 부여합니다.
REVOKE기존에 부여한 권한을 회수합니다.

일부 DBMS에서는 DENY, AUDIT, NOAUDIT 같은 확장 DCL도 존재하지만 표준 SQL에서는 위 두 개가 핵심이다.

예제

GRANT - 권한 부여

-- 사용자 'kim'에게 'employees' 테이블의 SELECT 권한을 부여
GRANT SELECT ON employees TO kim;

-- INSERT와 UPDATE 권한을 함께 부여
GRANT INSERT, UPDATE ON employees TO kim;

REVOKE - 권한 회수

-- 'kim'에게 부여했던 SELECT 권한 회수
REVOKE SELECT ON employees FROM kim;

WITH GRANT OPTION

-- 'kim'가 다른 사용자에게도 권한을 부여할 수 있게 허용
GRANT SELECT ON employees TO kim WITH GRANT OPTION;

kim은 이제 다른 사람에게도 SELECT권한을 넘길 수 있다.

부여할 수 있는 권한 종류

권한 종류설명
SELECT데이터를 조회할 수 있음
INSERT데이터를 삽입할 수 있음
UPDATE데이터를 수정할 수 있음
DELETE데이터를 삭제할 수 있음
EXECUTE프로시저나 함수 실행 가능
ALL모든 권한을 의미

대상 객체

권한은 특정 데이터베이스 객체에 부여된다.

  • 테이블
  • 시퀸스
  • 저장 프로시저
  • 함수
  • 스키마
  • 전체 데이터베이스(DBA 권한 등)

접근 제어를 체계적으로 하기 위해서

USER (사용자)

  • USER는 데이터베이스에 접속할 수 있는 주체이다.
  • 실제 사람, 애플리케이션, 백앤드 서비스 등 모두 USER로 간주한다.
  • 각각의 USER는 고유한 이름과 비밀번호, 그리고 접근 권한을 가진다.
CREATE USER kim WITH PASSWORD 'password';

ROLE (역할)

  • ROLE은 하나 이상의 권한을 묶어놓은 그룹이다.
  • 여러 사용자에게 공통된 권한을 주고 싶을 때 ROLE을 만들고, 각 사용자에게 ROLE을 부여한다.
  • 권한을 직접 사용자에게 부여하기보다는 ROLE로 관리하는 것이 효율적이다.
  • 일부 DBMS(ProstgreSQL 등)에서는 ROLE과 USER를 거의 동일하게 취급하기도 한다.
-- ROLE 생성
CREATE ROLE sales_team;

-- ROLE에 권한 부여
GRANT SELECT, INSERT ON orders TO sales_team;

-- 사용자에게 ROLE 부여
GRANT sales_team TO kim;

권한 계층 구조 (Privilege Hierarchy)

권한은 다음과 같은 계층 구조로 나뉘며, 범위가 넓은 것부터 좁은 것으로 생각하면 된다.

(최상위) DATABASE 수준 권한
   └─ SCHEMA 수준 권한
        └─ OBJECT 수준 권한 (TABLE, VIEW, FUNCTION 등)
            └─ COLUMN 수준 권한
수준예시설명
데이터베이스GRANT CREATE ON DATABASE mydb TO dev_user;DB 내 객체 생성 허용
스키마GRANT USAGE ON SCHEMA hr TO hr_analyst;스키마 접근 허용
테이블GRANT SELECT ON employees TO analyst;테이블 조회 허용
컬럼GRANT SELECT (name, salary) ON employees TO hr_manager;특정 컬럼만 조회 허용

사용 팁

-- 신규 사용자에게 읽기 전용 권한 부여
GRANT SELECT ON products TO new_user;

-- DBA가 특정 부서 사람에게 주문 관련 테이블의 수정 권한 부여
GRANT INSERT, UPDATE, DELETE ON orders TO sales_team;

-- 권한 회수 - 퇴사자 처리
REVOKE ALL ON *.* FROM byebye;

권한/역할 관리

전략설명
최소 권한 원칙사용자가 필요한 권한만 가지도록 최소한의 권한만 부여
ROLE 기반 관리비슷한 권한을 ROLE로 묶고, 사용자에게 ROLE 할당
정기적 검토권한이 오래된 사용자는 제거하거나 갱신
감사(Audit) 로그누가 어떤 권한을 가지고 있는지 추적 가능하도록 로그 관리

사용 시 유의사항

  • 관리자 권한 필요: 일반 사용자는 권한을 부여할 수 없다.
  • 롤백 불가: DCL 명령은 대부분 COMMMIT없이도 즉시 적용된다.
  • 보안 사고 주의: WITH GRANT OPTION은 권한이 무분별하게 퍼질 수 있다.
  • 권한 설정은 가급적 역할(ROLE) 기반으로 관리하는 것이 좋다.
profile
백엔드 개발자를 목표로 공부하는 대학생

0개의 댓글