Database/PostgreSQL

[PostgreSQL] pg_hba.conf 파일 설정

Ma_Sand 2023. 4. 27. 00:16
반응형

pg_hba.conf 파일

pg_hba.conf 파일은 클라이언트 인증 파일로, 데이터베이스 클러스터의 데이터 디렉토리에 저장되는 환경설정 파일로 제어가 된다. hba는 호스트 기반 인증(host-based authentication)의 약어이다.

해당 파일은 initDB.exe를 실행하면 data 디렉토리 안에 생성된다.

# Put your actual configuration here
# ----------------------------------
#
# If you want to allow non-local connections, you need to add more
# ""host"" records.  In that case you will also need to make PostgreSQL
# listen on a non-local interface via the listen_addresses
# configuration parameter, or via the -i or -h command line switches.

# CAUTION: Configuring the system for local ""trust"" authentication
# allows any local user to connect as any PostgreSQL user, including
# the database superuser.  If you do not trust all your local users,
# use another authentication method.


# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5 

# IPv6 local connections:
host    all             all             ::1/128                 md5

# Allow replication connections from localhost, by a user with the
# replication privilege.
host    replication     repluser        0.0.0.0/0               md5

 

 

 

기본 형식

  1. 한 줄당 하나씩 있는 레코드 세트이다.
  2. 빈 줄과 주석 문자(#) 뒤의 텍스트는 무시된다.
  3. 레코드는 여러 개의 필드로 구성되며, 공백 및 탭으로 구분된다.
  4. 레코드의 필드값에 큰 따옴표("")를 사용하면 필드에 공백을 포함할 수 있다.
  5. 데이터베이스, 사용자 또는 주소 필드의 키워드에 따옴표를 사용하면 단어 자체의 특수한 의미가 사라지고 해당 이름의 데이터베이스, 사용자 또는 호스트와 동일해진다.

 

반응형

 

레코드

TYPE    DATABASE    USER    ADDRESS    METHOD

각 레코드는 연결에 사용되는 연결 유형, 클라이언트 IP주소 범위(연결 유형에 해당하는 경우), 데이터베이스명, 사용자명 및 인증 방법을 지정한다.

연결 타입, 클라이언트 IP주소, 요청된 데이터베이스 및 사용자명이 일치하는 첫 번째 레코드는 인증을 수행할 때 사용된다.

레코드가 하나 선택되고 인증에 실패한 경우엔 다음 레코드는 고려되지 않으며, 일치하는 레코드가 없을 경우 액세스가 거부된다.

 

 

 

필드

1. HOST TYPE

: 접근자의 접근 위치와 통신 암호화 관련 설정을 한다.

 1) local: Unix 도메인 소켓을 사용한 연결을 시도한다.

 2) host: TCP/IP를 사용한 연결을 시도한다. SSL or No SSL 연결 시도와 일치한다.

   cf) 기본 동작이 로컬 루프백 주소 localhost에 대해서만 TCP/IP 연결을 Listen하므로 Listen addresses 환경설정 매개변수에 적절한 값으로 서버가 시작되지 않으면 원격 TCP/IP 연결이 불가능하다.

 3) hostssl: SSL 암호화를 사용하여 TCP/IP로 연결을 시도한다.

 4) hostnossl: SSL을 사용하지 않는 TCP/IP 연결을 시도한다.

 

 

2. DATABASE NAME

 1) all: 모든 데이터베이스에 영향을 준다.

 2) sameuser: 요청된 데이터베이스가 요청된 사용자와 이름이 동일한 경우에 레코드가 일치하도록 한다.

 3) samerole: 요청된 사용자가 요청된 데이터베이스와 이름이 동일한 role의 멤버여야 하는지 지정한다.

 4) replication: 복제 연결이 요청되면 레코드가 일치하도록 한다. 이때, 복제 연결은 특정 데이터베이스를 지정하지 않는다. 이외의 경우엔 특정 PostgreSQL 데이터베이스명으로 사용되며, 쉼표로 구분하여 여러 개의 데이터베이스명을 쓸 수 있다. 또한, 데이터베이스명이 포함된 파일은 파일명 앞에 @를 붙여 지정할 수 있다.

 

 

3. USER NAME

 1) all: 모든 계정에 영향을 준다.

 2) 계정명: 해당 계정에만 영향을 준다. 이때, 쉼표로 구분하여 여러 개의 계정명을 쓸 수 있다.

 

 

4. ADDRESS

: IP 규칙을 만들며, IP 주소 대역은 CIDR 표기법을 사용한다.

172.134.0.21/32의 경우 슬래쉬 기준 왼쪽은 시작 주소, 오른쪽은 마스크 길이를 지정한다.

 1) IPv4 주소 범위

   ○ 예시

      - 단일 호스트의 경우 172.20.11.132/32 (마스크 길이값: 32)

      - 소규모 네트워크의 경우 172.20.11.0/24

      - 대규모 네트워크의 경우 10.6.0.0/16

   ○ 모든 IPv4 주소0.0.0.0/0으로 나타낸다.

 

 2) IPv6 주소

   ○ 예시

      - 단일 호스트 루프백 주소는 ::1/128 (마스크 길이값: 128)

      - 소규모 네트워크의 경우 fe80::7a31:c1ff:0000:0000/96

   ○ 모든 IPv6 주소::0/0으로 나타낸다.

 

 3) 호스트명이 지정된 경우

   ○ 해당 이름은 클라이언트 IP주소의 역방향 이름 분석 결과와 비교된다.

      ex) DNS가 사용되는 경우 역방향 DNS 조회

   ○ 호스트명 비교는 대소문자 구분하지 않는다.

   ○ 일치하는 호스트명이 있는 경우 순방향 이름 분석을 한다.

   ○ 양방향으로 일치하는 경우 항목이 일치하는 것으로 간주한다.

 

※주의: CIDR 표기의 시작 주소를 지정할 때는 끝 값이 0이어도 생략하면 안된다.

 

 

5. AUTH-METHOD

: 패스워드의 전송 방식을 설정한다.

- trust / reject / md5 / password / etc... -> md5를 설정하면 된다.

- 유의: pgsql 예전 버전에서는 trust로 기본 설정되므로 반드시 md5 등의 암호화 방법으로 변경하여야 한다.

   *trust는 패스워드 없이도 바로 접근 가능

 

 

 

 

출처: https://www.postgresql.kr/docs/9.6/auth-pg-hba-conf.html

반응형