PostgreSQL · 2026-02-11

PostgreSQL 보안: pg_hba.conf와 인증·권한 설정

pg_hba.conf 구성, 인증 방식 비교, TLS 적용과 역할 기반 권한 정책, GRANT/REVOKE 예제까지 포함한 PostgreSQL 보안 설정 핵심 자료

작성일 : 2026-02-11 ㆍ 작성자 : 관리자
post
목차

왜 pg_hba.conf와 인증·권한 설정이 중요한가

데이터베이스 접근 제어는 시스템 보안의 기초이다. PostgreSQL에서는 접속 제어를 담당하는 파일이 pg_hba.conf이며, 인증 방식과 사용자 권한 설정이 결합되어 안전한 운영 환경을 만든다. 초보자도 이해하기 쉽게 핵심 개념과 설정 예제를 순서대로 설명한다.

pg_hba.conf 기본 개념

파일 역할과 위치

pg_hba.conf는 호스트 기반 인증 정보를 담는 텍스트 파일이다. 보통 데이터 디렉토리 안에 위치하며, 서버가 시작될 때 읽는다. 이 파일은 어떤 클라이언트가 어떤 데이터베이스에 어떤 인증 방식으로 접속할지 결정한다.

엔트리 구조

각 줄은 접근 유형, 데이터베이스, 사용자, 주소(또는 소켓), 인증 방식 순으로 구성된다. 순서대로 처리되므로 구체적인 규칙을 먼저 배치하는 것이 중요하다.

주요 인증 방식 비교

  • trust: 암호 없이 접속 허용 — 개발 환경 이외 사용 금지
  • md5: MD5 해시 기반 암호 검증 — 이전에 널리 사용
  • scram-sha-256: 안전한 해시 방식 — 권장
  • peer: 로컬 소켓에서 운영체제 사용자로 인증
  • cert: 클라이언트 인증서 기반 — TLS와 함께 사용

pg_hba.conf 설정 예제

아래 예제는 기본적인 안전 설정을 보여준다. 필요에 따라 CIDR과 데이터베이스 이름, 사용자명을 조정한다.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     peer
hostssl all             all             192.168.0.0/24          scram-sha-256
host    replication     replicator      10.0.0.0/8              md5
host    all             readonly        203.0.113.0/24          md5
host    all             all             0.0.0.0/0               reject

설명: 로컬 접속에는 peer 사용, 내부망은 TLS(hostssl)+scram-sha-256 우선 적용, 리플리케이션 전용 계정은 별도 네트워크에서 md5 허용, 외부의 불특정 접속은 기본적으로 차단한다.

TLS와 인증서 관리

TLS는 전송 중 데이터 보호에 필수적이다. server.crt와 server.key를 postgresql.conf에서 지정하고, 클라이언트 인증을 원하면 ca 인증서를 배포한다. cert 방식으로 클라이언트 신원을 검증하면 추가 보안이 확보된다.

권한 설계와 역할 관리

원칙

  • 최소 권한 원칙 적용: 필요한 권한만 부여
  • 역할(role) 사용 권장: 사용자 그룹화로 관리 용이성 확보
  • 특권 계정 분리: 운영계정과 애플리케이션 계정 분리

권한 설정 예제

-- 역할과 사용자 생성
CREATE ROLE app_role NOINHERIT;
CREATE USER app_user WITH PASSWORD 'secure_pwd';
GRANT app_role TO app_user;

-- 스키마와 테이블 권한 제한
GRANT USAGE ON SCHEMA app_schema TO app_role;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA app_schema TO app_role;

-- 관리 권한은 별도의 운영 계정에만 부여
GRANT CREATE ON DATABASE app_db TO db_admin;

주의: 실제 비밀번호는 강력한 값과 보안된 저장소(예: 시크릿 매니저)에 보관한다.

운영에서의 점검 항목

  • pg_hba.conf 변경 후 pg_reload_conf()로 재로드하거나 서버 재시작
  • 로그 레벨을 적절히 설정해 인증 실패 원인 파악
  • 정기적으로 역할과 권한을 감사하여 불필요 권한 제거
  • TLS 인증서 만료일 확인 및 자동 갱신 체계 마련

테스트와 배포 체크리스트

  • 개발 환경에서 먼저 설정을 검증한 뒤 운영 반영
  • 접속 시나리오별로 사용자 계정으로 실제 쿼리 수행 테스트
  • 백업 및 복구 절차가 권한 변경에 영향을 받지 않는지 확인

마무리

pg_hba.conf의 정확한 규칙 작성과 적절한 인증 방식 선택, 그리고 역할 기반 권한 관리는 PostgreSQL 보안의 핵심이다. scram-sha-256과 TLS를 기본으로 적용하고, 최소 권한 원칙을 지키면 대부분의 위험을 줄일 수 있다. 마지막으로 변경 시 충분한 테스트와 권한 감사를 병행하는 것이 안전한 운영으로 이어진다.

pg_hba.conf 설정 예제 postgres 인증 방법 postgres 권한 설정 best practice PostgreSQL 보안 scram-sha-256 TLS 설정 역할 기반 권한 GRANT REVOKE 예제