Thông báo lỗi Postgres: FATAL: Xác thực không thành công cho người dùng


26

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:


36

Đ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:

  • Bạn có vai trò cơ sở dữ liệu 'foo' trên cơ sở dữ liệu 'db'
  • Tệp của bạn 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 dbcho người dùng kết nối từ một số máy chủ nhất định
  • Tên người dùng unix tạo kết nối là 'foo'
  • Máy chủ Nhận dạng đang chạy trên máy mà người dùng đang kết nối xác nhận rằng tên người dùng của họ thực sự là 'foo'

Nguyên nhân và giải pháp có thể:

  1. Không có máy chủ Nhận dạng nào đang chạy trên máy bạn đang cố gắng kết nối. Kiểm tra điều này bằng cách thử kết nối với nó trên cổng 113. Nếu thất bại, hãy cài đặt máy chủ Nhận dạng (ví dụ sudo apt-get install oidentd:).
  2. Có một máy chủ Nhận dạng, nhưng không có vai trò cơ sở dữ liệu khớp với tên bạn đang cố gắng kết nối với ('foo' trong ví dụ trên). Vì vậy, tạo nó bằng cách kết nối bằng cách nào đó với cơ sở dữ liệu với quyền superuser và làm CREATE ROLE foo. Hoặc thêm một mục vào /etc/postgresql/.../main/pg_ident.conf.
  3. Có thể tên người dùng shell không khớp với vai trò cơ sở dữ liệu. Bạn có thể kiểm tra điều này bằng cách kết nối với máy chủ Nhận dạng trong khi kết nối đang diễn ra và truyền đúng số cổng.
  4. 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.conftậ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
    

2
Đối với fedora, tệp nằm trong/var/lib/psql/data
Anwar

Tôi không cho rằng bất cứ ai sẽ quan tâm để trả lời tại sao postgres sử dụng 'nhận dạng' làm thông tin đăng nhập mặc định?
icc97

Bởi vì điều đó có ý nghĩa 20 năm trước và không có gì thay đổi trong * nix? :)
Steve Bennett

@ icc97, không có gì trong câu trả lời này chỉ ra rằng "nhận dạng" là thông tin đăng nhập mặc định cho Postgres; Nơi mà bạn có được ý tưởng đó? Cho đến nay tôi biết tên vai trò siêu người dùng mặc định trong cụm Postgres là "postgres".
tự đại diện

9

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"


1
thay đổi "nhận dạng" -> "md5" đã làm điều đó cho tôi
webwesen

3

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 ...


0

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.


Không cần thiết phải khởi động lại toàn bộ máy của bạn khi thay đổi cấu hình PostgreSQL. Thay vào đó, hãy thử sử dụng pg_ctl reloadtừ 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.
benjwadams
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.