저번 시간에 유저를 생성하고, 비밀번호를 바꾸고, encryption 알고리즘을 md5에서 scram-sha-256으로 바꾸는 것까지 하였습니다. 이번 시간에는 유저 인증 정보를 보는 방법을 알아 봅시다.

 


 먼저 인증 정보는 pg_authid에 있습니다. 이 문서에 대략적인 설명이 나와 있는데요. rolname은 gh와 같은 유저 이름이 됩니다. 그리고, rolpassword는 암호화된 비밀번호를 의미합니다. SCRAM-SHA-256은 너무 기니까, 대충 앞에서 40자만 뽑아서 가져왔습니다. 그러기 위해서, left 함수를 썼습니다.

 

 이제 인증 방식과 암호화 방식을 md5로 바꿔 봅시다.

 

  pg_hba.conf 파일입니다.

 

 이것은 postgresql.conf 파일입니다. 이렇게 설정하고, postgresql을 재시작 한 다음에, 새로운 role을 만들어 봅시다.

 

 그러면 gh2는 md525551f... 등으로 암호화(?) 되었음을 알 수 있어요.

 


 인증 방식도 md5로 바뀌었습니다. 172.30.1.0/24 대역에서 postgresql server 172.30.1.7에 로그인을 해 보겠습니다.

 

 

 gh로 로그인을 하였습니다. 이 유저의 암호는 scram-sha-256으로 되어 있습니다.

 

 

 그런데 잘 들어가집니다. 왜 그럴까요? 이는 문서를 보면 알 수 있습니다. md5 단락을 보면, pg_hba에 md5로 인증 방식이 설정되었다고 해도, 암호화가 scram-sha-256으로 되어 있다면, scram-sha-256을 선택하기 때문입니다. 그러니, 아무 문제 없이 인증이 됩니다.

 


 저번 시간에 했던 것을 복습해 봅시다. postgresql.conf의 password_encryption을 md5에서 scram-sha-256으로 바꿨습니다.

 

 그 다음에, pg_hba.conf 파일에 있는 인증 방식도 md5에서 모두 scram-sha-256으로 바꿨습니다.

 

 여기서 gh2도 172.30.1.0/24이므로, 172.30.1.0/24 대역에 있는 ip에서 접근이 가능합니다.

 

 그런데, client에서 접속해 보니까 FATAL이라고 뜨면서 password authentication 오류가 뜹니다. 왜 그럴까요? 인증 방식이 달라져서 그렇습니다. rolname이 gh2인 것의 rolpassword는 md5로 암호화 된 것을 보았습니다. 그런데, 중간에 인증 방식을 sha256으로 바꿔버렸단 말이죠.

 

 문제는 같은 문자열이라도 md5로 암호화 하는 것과, sha256으로 암호화 하는 것이랑 다르다는 것입니다.

 

 따라서, gh2의 패스워드를 재설정 해 주어야 합니다. 재설정 후에는 rolpassword가 md5에서 SCRAM-SHA-256으로 바뀌었어요.

 

 172.30.1.0/24 대역에서 dbeaver로 접속해 보니, 잘 된다는 것을 확인할 수 있습니다.