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