Giả sử bạn đang xem tin nhắn này:
FATAL: Ident authentication failed for user "..."
Nguyên nhân của thông báo lỗi này là gì?
Giả sử bạn đang xem tin nhắn này:
FATAL: Ident authentication failed for user "..."
Nguyên nhân của thông báo lỗi này là gì?
Câu trả lời:
Điều đó có nghĩa là Postgres đang cố gắng xác thực người dùng bằng giao thức Nhận dạng và không thể. Xác thực auth hoạt động như thế này:
pg_hba.conf
(trong /etc/postgres-something/main
) định nghĩa 'Nhận dạng' là giao thức để kết nối với cơ sở dữ liệu db
cho người dùng kết nối từ một số máy chủ nhất địnhNguyên nhân và giải pháp có thể:
sudo apt-get install oidentd
:).CREATE ROLE foo
. Hoặc thêm một mục vào /etc/postgresql/.../main/pg_ident.conf
.Có lẽ bạn thực sự muốn kết nối với một mật khẩu , không phải là Nhận dạng. Chỉnh sửa pg_hba.conf
tập tin một cách thích hợp. Ví dụ: thay đổi:
host all all 127.0.0.1/32 ident
đến
host all all 127.0.0.1/32 md5
Không chắc chắn về nguyên nhân, nhưng điều này đã khắc phục nó cho tôi:
trong pg_hba.conf
thay đổi điều này:
lưu trữ tất cả 127.0.0.1 / 32 md5
Lỗi chính xác: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"
Trên CentOS, thêm dòng sau vào /var/lib/pgsql/9.3/data/pg_hba.conf
:
host all all 127.0.0.1/32 trust
Và bình luận ra các mục khác.
Tất nhiên, cài đặt này không an toàn, nhưng nếu bạn chỉ loay hoay với một VM phát triển như tôi thì có lẽ nó ổn ...
Nếu bạn chưa thử điều này, hãy xem lại tệp pg_hba.conf của bạn. Nó sẽ được đặt tên như /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); bạn có thể phải sử dụng 'find / -name pg_hba.conf' để xác định vị trí của nó.
Ở dưới cùng của tệp, thay đổi các giá trị 'PHƯƠNG PHÁP' thành 'tin cậy' để thử nghiệm cục bộ (xem tài liệu postgres để biết thông tin đầy đủ). Khởi động lại máy để đảm bảo mọi thứ được khởi động sạch sẽ và các thông số mới được đọc.
Hy vọng điều này sẽ chữa khỏi tai ương của bạn. Nó đã giải quyết vấn đề của tôi trên Fedora 20 với PostgreSQL 9.3.
pg_ctl reload
từ bảng điều khiển hoặc SELECT pg_reload_conf();
khi thực thi SQL với tư cách là người dùng đặc quyền.
/var/lib/psql/data