[강의] DCL(Data Control Language)

Jerry·2025년 8월 27일

DCL(Data Control Language

DCL

DB에 대한 접근 권한 제어에 사용하는 언어로, 각종 권한을 부여, 회수 가능
권한 관리를 통해 접근 제어가 가능하며, 보안을 유지하는 기능
GRANT(유저 권한 부여), REVOKE(유저 권한 삭제)

  • 사용자의 권한이나, 관리자 설정 등을 처리

DB 계정 관리

데이터베이스를 사용하기 위한 계정
데이터베이스에 접근하기 위해서는 해당 사용자로 로그인해서 사용해야 함

데이터베이스 관리자 계정 (Administrative)

데이터베이스의 생성과 관리를 담당하는 계정
모든 권한과 책임을 가지는 계정 (ex : root)

데이터베이스 사용자 계정 (User)

데이터베이스에 대하여 질의, 갱신, 보고서 작성 등의 작업을 수행할 수 있는 계정
업무에 필요한 최소한의 권한만 가지는 것을 원칙으로 함

PostgreSQL 기본 계정

  1. postgres : 최상위 관리자 계정(다른 DB는 root라 부름)
  2. pg_... (시스템 롤들) - 필요한 내부용 롤들이 자동으로 포함됨
    pg_read_all_data: 모든 데이터 읽기 권한 롤
    pg_write_all_data: 모든 데이터 쓰기 권한 롤
    pg_monitor: 모니터링 관련 권한 롤
    pg_read_all_settings: 서버 설정 읽기 권한
    pg_read_all_stats: 통계 보기 권한
    pg_signal_backend: 백엔드 프로세스 종료 권한

계정 조회

SELECT rolname, rolsuper, rolcreatedb, rolcreaterole, rolcanlogin
FROM pg_roles;

계정 생성 방법

-- 기본 사용자 생성
CREATE USER username1 WITH PASSWORD 'password';

-- ROLE을 이용한 사용자 생성 (USER와 사실상 동일)
CREATE ROLE username2 WITH LOGIN PASSWORD 'password';

-- 계정 생성 시 자주 쓰는 옵션
CREATE USER username3
  WITH PASSWORD 'password'
  CREATEDB -- 데이터베이스 생성 권한 부여
  CREATEROLE -- 다른 ROLE 생성 권한 부여
  SUPERUSER -- 슈퍼유저 권한 부여
  LOGIN -- 로그인 가능 (USER 생성 시 기본값)
  NOINHERIT; -- 다른 ROLE 권한 상속 불가

계정 수정

ALTER USER username WITH PASSWORD 'new_password';
ALTER USER username WITH SUPERUSER; -- 권한 부여
ALTER USER username WITH NOSUPERUSER;

계정 비밀번호 수정

ALTER USER username WITH PASSWORD 'newpassword';

계정 삭제

DROP USER username;

DB 권한관리

사용자의 DB 객체(테이블, 뷰 등)에 대한 접근 및 조작 권한을 부여하거나 제한하는 보안 메커니즘이다.
GRANT, REVOKE, SHOW GRANTS 등을 사용해 사용자에게 특정 SQL 작업 권한을 관리하며, 사용자마다 다른 권한과 역할(롤)을 설정할 수 있다. 다수 사용자가 공유하는 데이터베이스 환경에서 보안을 유지하고 데이터
무결성을 보호하기 위한 핵심 기능이다.

시스템 권한

데이터베이스 관리자가 가지고 있는 권한

  • CREATE ROLE : 사용자/역할(Role) 생성
  • DROP ROLE : 사용자/역할(Role) 삭제
  • CREATEDB : 데이터베이스 생성 권한
  • CREATEROLE : 다른 Role 생성 및 권한 부여 가능
  • SUPERUSER : 슈퍼유저(모든 권한, DBA 권한과 동일)
  • REPLICATION : 스트리밍 복제 권한
  • BYPASSRLS : Row-Level Security 정책 무시 가능

시스템 관리자가 사용자에게 부여하는 권한

  • LOGIN : 데이터베이스 접속 (Oracle의 CREATE SESSION에 해당)
  • CREATE : 객체 생성 권한 (스키마 내 테이블/뷰/시퀀스 등 생성 가능)
  • CREATE TABLE : 테이블 생성 권한
  • CREATE VIEW : 뷰 생성 권한
  • CREATE SEQUENCE : 시퀀스 생성 권한
  • CREATE FUNCTION / PROCEDURE : 함수 및 프로시저 생성 권한
  • USAGE : 스키마, 시퀀스 등에 접근 가능
  • EXECUTE : 함수/프로시저 실행 권한
  • ALL PRIVILEGES : 특정 객체에 대한 모든 권한 부여

DB 오브젝트 권한

오브젝트 권한은 테이블, 뷰, 시퀀스, 프로시저 등 개별 객체에 대해 사용자에게 부여되는 세부 권한이다.
객체 유형에 따라 SELECT, INSERT, EXECUTE, ALTER, USAGE 등의 권한이 할당되어 접근 및 조작을 제어한다.

DCL - 권한부여(GRANT)

GRANT <권한,...> ON <OBJECT_NAME> TO <ROLE>;

-- 테이블에 대한 SELECT, INSERT 권한
GRANT SELECT, INSERT ON mytable TO user01;

-- 스키마에 대한 사용 권한
GRANT USAGE ON SCHEMA myschema TO user01;

-- 데이터베이스 접속 권한
GRANT CONNECT ON DATABASE mydb TO user01;
profile
Backend engineer

0개의 댓글