클라이언트 인증

클라이언트 인증 (Client Authentication)

데이터베이스 서버에 연결하려면 "나는 어떤 데이터베이스 사용자로 접속할 거야"라고 밝혀야 해요. 그런데 중요한 건, 그렇게 요청한 사용자 이름이 실제로 접속을 허락받은 사용자인지 서버가 확인해야 한다는 거죠. 이 페이지에서는 PostgreSQL이 클라이언트의 신원을 어떻게 확립하고, 어떤 인증 방식(method)들을 제공하는지 개괄적으로 살펴볼게요. 실제 설정 파일인 pg_hba.conf의 상세한 내용은 하위 섹션에서 다룹니다.

출처: PostgreSQL 공식 문서 — Client Authentication

인증이란 무엇인가 (What is Authentication)

클라이언트 애플리케이션이 데이터베이스 서버에 접속할 때, 유닉스 컴퓨터에 특정 사용자로 로그인하는 것과 비슷하게, 어떤 PostgreSQL 데이터베이스 사용자 이름으로 접속할지 지정해요. SQL 환경 안에서 현재 활성화된 데이터베이스 사용자 이름은 데이터베이스 객체에 대한 접근 권한을 결정하죠. 자세한 내용은 Chapter 21 — Database Roles에서 다루기 때문에, 그 전에 "어떤 데이터베이스 사용자가 접속할 수 있는지"를 제한하는 게 필수적이에요.

참고 (Note)

Chapter 21에서 설명하듯이, PostgreSQL은 실제로는 role(역할) 단위로 권한 관리를 해요. 이 장에서는 일관되게 *데이터베이스 사용자(database user)*라는 말을 "LOGIN 권한을 가진 role"이라는 의미로 쓸게요.

인증(Authentication) 은 데이터베이스 서버가 클라이언트의 신원을 확립하는 과정이에요. 그리고 그 신원을 바탕으로, 클라이언트 애플리케이션(또는 그 애플리케이션을 실행하는 사용자)이 요청한 데이터베이스 사용자 이름으로 접속하는 것이 허용되는지도 결정합니다.

PostgreSQL은 다양한 클라이언트 인증 방식을 제공해요. 특정 클라이언트 연결에 사용할 방식을 (클라이언트) 호스트 주소, 데이터베이스, 사용자에 따라 선택할 수 있죠.

데이터베이스 사용자 이름과 OS 사용자 이름 (Database User Names vs. OS User Names)

PostgreSQL 데이터베이스 사용자 이름은 서버가 실행되는 운영체제(OS)의 사용자 이름과 논리적으로 분리돼요. 만약 특정 서버의 모든 사용자가 서버 머신에 계정을 갖고 있다면, 데이터베이스 사용자 이름을 운영체제 사용자 이름과 맞추는 게 합리적일 수 있어요.

하지만 원격 연결을 받아들이는 서버라면 로컬 운영체제 계정이 없는 데이터베이스 사용자가 많을 수 있어요. 이런 경우엔 데이터베이스 사용자 이름과 OS 사용자 이름 사이에 아무 연관이 없어도 괜찮아요.

문서 구성 (Table of Contents)

이 장의 하위 섹션에서 각 인증 방식의 상세 설정을 다룹니다.

인증 방법은 여러 가지가 있는데, 간단히 말하면 다음과 같은 것들이 있어요.

  • Trust 인증: 호스트와 조건만 맞으면 어떤 암호도 요구하지 않고 그냥 접속을 허용해요. 주로 로컬 개발 환경에서 써요.
  • Password 인증: scram-sha-256(기본) 또는 md5 방식으로 비밀번호를 검증해요.
  • Peer 인증: 로컬 유닉스 소켓에서 OS 사용자 이름과 데이터베이스 사용자 이름이 같은지 확인해요.
  • Ident 인증: Ident 프로토콜로 사용자 이름을 확인하는 방식이에요.
  • LDAP / RADIUS / PAM / GSSAPI / SSPI / 인증서: 외부 인증 서버나 인프라와 연동해 신원을 확인하는 방식들이에요.
  • OAuth 인가/인증: 최신 버전에서 추가된 방식으로, OAuth 기반 인가 서버를 통해 인증해요.

어떤 방식을 쓰느냐는 보안 요구사항과 운영 환경에 따라 달라지므로, 실제 설정은 각 하위 문서를 참고해서 결정하는 게 좋아요.

더 알아보기 (Learn more)