psql: FATAL: Xác thực ngang hàng không thành công cho người dùng


12

Tôi vừa cài đặt PostgreSQL 9.4 trên Ubuntu 15.10.

  1. Tôi đã tạo một người dùng với createuser -P myuser
  2. Tôi đã tạo một cơ sở dữ liệu với createdb -O myuser mydatabase
  3. Tôi đã chỉnh sửa pg_hba.confvà thêmlocal mydatabase myuser md5
  4. Tôi đã khởi động lại PostgreSQL với sudo service postgresql restart

Người dùng myuser chỉ là người dùng PostgresSQL và không có tài khoản người dùng trên Ubuntu.

Khi tôi cố gắng kết nối với cơ sở dữ liệu với psql -W mydatabase myusernó không thành công psql: FATAL: Peer authentication failed for user "myuser".

PostgreSQL đang chạy trên mạng

 postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2016-03-03 09:53:00 CET; 9min ago
  Process: 22219 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 22219 (code=exited, status=0/SUCCESS)

Mar 03 09:53:00 SERVER01 systemd[1]: Starting PostgreSQL RDBMS...
Mar 03 09:53:00 SERVER01 systemd[1]: Started PostgreSQL RDBMS.

... và lắng nghe.

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:postgresql    *:*                     LISTEN
tcp6       0      0 localhost:postgresql    [::]:*                  LISTEN
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     151534   /var/run/postgresql/.s.PGSQL.5432

Tôi phải làm gì để kết nối với người dùng myuser với cơ sở dữ liệu mydatabase ?

Câu trả lời:


15

Trong một bản cài đặt mới từ vài ngày trước, dòng thứ hai của tôi pg_hba.conf

local   all             all              peer

Tôi tin rằng đây là một trong những nỗ lực kết nối của bạn không thành công.

Thứ tự của các quy tắc quan trọng ở đây: cái đầu tiên phù hợp với phương thức truy cập, tên người dùng, tên cơ sở dữ liệu và phạm vi IP nguồn sẽ được xem xét. Nếu thất bại, thì không có lần thử thứ hai, vì vậy lần thử kết nối có thể sẽ thất bại. Hoặc, như tài liệu nêu:

Không có "dự phòng" hoặc "sao lưu": nếu một bản ghi được chọn và xác thực thất bại, các bản ghi tiếp theo sẽ không được xem xét. Nếu không có hồ sơ phù hợp, truy cập bị từ chối.

Giải pháp rất dễ dàng: hoặc xóa dòng trên nếu bạn không có kế hoạch sử dụng peerxác thực hoặc di chuyển quy tắc cụ thể của bạn lên trên quy tắc này.


Di chuyển dòng làm việc.
Daniel

Làm cách nào chúng tôi có thể lưu trữ mật khẩu bằng cách sử dụng auth 'md5' để chúng tôi không phải nhập lại nhiều lần ...?
sk

3

Trước tiên ... hãy kiểm tra xem bạn có cấp phép cho người dùng myuser trong pg_hba.conf không. Ví dụ:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Hoặc bất kỳ dòng quyền nào khác đối với IPV4 (và IPv6 nếu bạn sử dụng) với: LOẠI PHƯƠNG PHÁP ĐỊA CHỈ DỮ LIỆU NGƯỜI DÙNG

Sau khi kiểm tra này, hãy chạy psql như sau:

psql -h localhost -U myuser mydatabase

Và sau đó, lời nhắc được yêu cầu, nhập mật khẩu người dùng myuser.


1
Và tất nhiên, loại bỏ xác thực ngang hàng.
Alvaro Neto

Có một phiên bản tôi đã cập nhật để cho phép kết nối từ xa, địa chỉ nghe được đặt thành '*'và thêm host all all 0.0.0.0/0 md5quy tắc. Không phải xóa auth ngang hàng. Chỉ cần làm việc với -h localhostparam. Câu trả lời tốt nhất vì rất có thể bạn không phải chạm vào cấu hình trên bản cài đặt chứng khoán.
Mark Carpenter Jr
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.