[Mac M1] Postgres FATAL:password authentication failed for user

주성민·2022년 5월 27일
1
post-thumbnail

개인적인 프로젝트 세팅 중에 M1 docker 컨테이너로 실행하고 있던 PostgreSQL DB와 연결하는 중 해당 오류를 보게 되었다.
**FATAL:peer authentication failed for user "--"
비밀번호 관련 인증에서 문제가 발생한 것으로 추정되는 것까지는 이해했지만, 마지막에 user "username" 부분의 username은 내 OS 계정이었다.
왜 PostgreSQL은 내 properties의 name 설정을 무시하고 데이터베이스에 존재하지 않는 OS 계정으로 접속을 시도한 걸까?

접속 계정 관련 비밀번호 문제를 검색했을 때 대부분 /var/lib/postgresql/data에 위치한 pg_hba.conf 파일을 수정해야 한다고 답변했다.
하지만 나의 Mac M1 환경에서는 cd /var/lib/postgresql/data 경로는 존재하지 않았다.

조금 더 검색 후 알게 된 사실
docker 이미지를 통해 컨테이너를 실행하게 되면 VM 내부에서 실행하게 된다고 한다.
즉, 내 일반 디렉터리에서는 찾을 수 없다는 뜻

다시 무한 검색의 굴레를 돌리다가 접속 방법을 알게 되었다.
Docker Desktop에 CLI 접속을 할 수 있게 해주는 버튼이 있다고 한다.

도커 Desktop의 Containers에 들어가 보면 내가 돌리고 있는 postgres의 컨테이너 CLI에 접속할 수 있는 버튼이 있다.

이후 Postgres에 접속해서 해당 명령어를 치게 되면 Postgres의 설정 파일 위치를 알 수 있다.

show data_directory

해당 경로를 통해 따라 접속하게 되면 pg_hba.conf 파일을 확인할 수 있고, 수정을 위해 vi로 접속한다.

vi 명령어 not found가 뜨는 분들은 vim을 별도로 설치해주어야 한다.

다른 사람들은 저 METHOD의 peer를 md5로 변경하라고 하던데 나의 경우 이미 trust로 패스워드 없이 접근이 가능한 형태였다.

trust: 패스워드 없이 접근 가능
reject: 거부
md5: md5암호화 전송
password: text로 전송

우선 사람들이 하라는 대로 md5로 변경도 해보고 이것저것 시도해 봤지만 계속 OS 계정으로 접속을 시도했다.

그렇게 조금 더 찾아본 결과 충격적인 사실을 확인했다.
Postgresql 접속 시 계정 정보를 넘겨주지 않으면 OS 계정으로 접속을 시도한다는 것이었다.

이것 또한 설정이 가능하다고 하던데 나의 경우 기본 설정으로 OS 계정 접속 시도가 되어있던 것 같다.

바로 .properties에 가서 계정 설정을 확인해 보았더니 ..
spring.datasource.username이 원래 spring.datasource.name으로 되어 있었다.
이래서 접속하려 할 때 내가 설정해둔 계정이 아닌 OS 계정으로 접속을 시도했던 것 같다.

뭔가 엄청나게 고민했던 것 치고 허무한 결말이었지만 Docker CLI를 통해 postgres 설정 파일도 건드려 볼 수 있었던 괜찮은 기회였다고 생각한다.

profile
Java Dev

0개의 댓글