postgresql 서버 설치하고 나면 반드시 건드리게 되는 설정 파일 중 하나가 pg_hba.conf 이다. 이름도 요상해서 봐도 무슨 의미인지 모를 수 있는데 알고보면 그리 복잡한 내용은 아니다.
pg_hba.conf
hba라는 명칭은 host-based authentication의 약자다. 호스트 기반 인증. 아무튼 postgres 로그인과 관련된 설정 파일이라는 거다.
pg_hba.conf 에 대한 가장 정확한 정보는 당연히 PostgreSQL Document 에 기록되어 있는데 사실 이걸 누가 한자 한자 꼼꼼히 읽겠나. 굳이 그럴 필요도 없고 구체적으로 필요한 게 생겼을 때 확인하는 정도로 활용하면 된다.
처음엔 설치 시 바로 확인되는 정도의 구성만 간단히 이해하고 넘어가자.
설정 파일 내용을 보게되면 TYPE, DATABASE, USER, ADDRESS, METHOD로 구분되고 각각의 설정값이 매핑되어 있다.
- TYPE : 연결 유형을 정의한다. local에서 유닉스 소켓으로 연결하는 건지 원격 호스트에서 tcp/ip로 연결하는 건지, ssl을 사용하는 tcp/ip 연결인지 같은 걸 정의한다.
- DATABASE : 연결하려는 postgresql의 데이터베이스를 정의한다. all 이면 모든 데이터베이스 대상이고 postgres 처럼 특정 데이터베이스를 지정할 수도 있다.
- USER : 데이터베이스에 접근할 수 있는 postgres 사용자 계정을 정의한다. all이면 모든 사용자 대상이고 postgres 처럼 특정 사용자를 지정할 수도 있다.
- ADDRESS : tcp/ip 로 연결 가능한 원격 호스트의 ip 주소를 정의한다. 0.0.0.0/0 이면 모든 ip에서 postgres에 접속이 된다는 의미다.
- METHOD : 로그인 인증 방법을 정의한다. 인증 방법은 아주 많은데 md5를 흔하게 사용하는 거 같고 유사시 trust 를 쓰기도 한다.
예를 들어
# IPv4 local connections:
host all all 127.0.0.1/32 md5
이 구성은 모든 데이터베이스에 대해 모든 사용자는 로컬호스트(127.0.0.1)에서 md5 알고리즘으로 비밀번호 인증 후 로그인할 수 있다는 걸 의미한다.
host all postgres 0.0.0.0/0 trust
이건 모든 데이터베이스에 대해 postgres 사용자는 모든 원격 호스트에서 비밀번호 없이 로그인할 수 있다는 의미다.
peer는 무엇인가?
local all all peer
peer는 아마 local 연결에서 디폴트 설정 값일 텐데 사용하고 있는 운영체제의 로그인 계정과 postgresql의 사용자 계정이 일치하는지 확인하고 로그인 시키는 방식이다.
이게 무슨 말이냐면 postgres 처음 설치하면 리눅스에 postgres라는 사용자가 생성된다. 사용자를 postgres로 전환하고
psql
명령어만 치면 비밀번호 없이 바로 로그인 되는 걸 볼 수 있는데 그 이유가 peer로 설정되어 있기 때문이다. 리눅스 사용자 postgres와 postgres의 디폴트 슈퍼계정인 postgres가 일치해서 로그인 되는 거다.