Note về chuyện kết nối tới PostgreSQL
09 Feb 2017Gần đây mình có tạo một Spring-Boot app connect tới PostgreSQL (tất cả đều nắm trên máy local). Lúc chạy thì bị báo lỗi không login được
org.postgresql.util.PSQLException: FATAL: password authentication failed for user “username”
Username và password cấu hình trong app là username và password của tài khoản Ubuntu mà mình login vào máy. Khi login vào PostgreSQL bằng lệnh
psql -d dbname
thì được bình thường. Sau một hồi tìm hiểu thì cũng biết được lý do.
PostgreSQL hỗ trợ nhiều phương thức login[1]: Trust, Peer, Password, LDAP,… Khi login bằng lệnh psql -d dbname
PostgreSQL sẽ kết nối thông qua Unix socket sử dụng Peer Authentication, phương pháp này sử dụng username của hệ điều hành như là database username để xác thực[2]. Do đó, nếu tạo 1 user khác trong PostgreSQL khác với username của hệ điệu hành thì khi login bằng psql -U new_username -d dbname
sẽ gặp lỗi psql: FATAL: Peer authentication failed for user "new_username"
.
Để app kết nối được với PostgreSQL, mình phải đặt password cho username dùng để login (password này khác với password của hệ điều hành). Lúc này Password Authentication sẽ được sử dụng, lưu ý nếu không đặt password thì không login được nhé.