Người dùng PostgreSQL không thể kết nối với máy chủ sau khi thay đổi mật khẩu


10

Tôi đã gặp điều này với 4 vai trò tôi đã tạo:
Sau khi thay đổi mật khẩu cho người dùng trong pgAdmin III bằng GUI (1), người dùng đó không thể đăng nhập nữa.
pgAdmin III hiển thị thông báo lỗi:

An error has occurred:

Error connecting to the server: FATAL:  password authentication failed for user "sam"
FATAL:  password authentication failed for user "sam"

Hệ thống của tôi: Postgresql 9.2 trên Ubuntu 12.04

Có cách nào để khắc phục điều này?

(1): đăng nhập bằng postgres tài khoản, nhấp chuột phải vào Người dùng đăng nhập, chuyển đến tab 'Định nghĩa' và nhập mật khẩu

Câu trả lời:


15

Có thể bạn đang bị cắn bởi lỗi PGAdmin này ( changelog ):

2012-11-28 AV 1.16.1 Điều khiển bộ chọn ngày trả về dấu thời gian đầy đủ theo mặc định, điều này có thể gây ra thay đổi ngày vô ý trong công việc và ngày hợp lệ của vai trò. Bỏ qua phần thời gian.

Lỗi này đã được nhìn thấy để thiết lập ngày hết hạn mật khẩu từ trước đến nay, chẳng hạn như 1/1/1970. Trong trường hợp này, thông báo lỗi khi cố gắng kết nối không khác gì với mật khẩu sai.

Bạn có thể kiểm tra những ngày hết hạn này với:

SELECT usename,valuntil FROM pg_user;

và nếu họ sai, hãy đặt lại chúng bằng:

ALTER USER username VALID UNTIL 'infinity';

và nâng cấp pgAdmin.


Cảm ơn rât nhiều! Điều này đã giải quyết vấn đề. Mỗi lần tôi đặt lại mật khẩu người dùng, pgAdmin sẽ đặt giá trị hợp lệ cho đến thời điểm 01-01-1970 để người dùng không thể đăng nhập nữa.
Cao Minh Từ

bạn hiểu rồi lỗi chết tiệt
Carter Cole

Làm thế nào chính xác là tôi phải đăng nhập vào psql ??? Đó là vai trò tôi vừa cập nhật.
ericpeter0n

1
@ ericpeter0n: tạm thời chuyển phương thức xác thực sang trusthoặc peertrong pg_hba.conftệp cho tài khoản này.
Daniel Vérité

Cảm ơn, đã sắp xếp nó. Đối với những người đến sau, "niềm tin" có nghĩa là: Khi bạn đã khởi động lại postgres, bạn có thể chạy psql mà không cần xác thực mật khẩu nếu bạn là người dùng cùng tên với người dùng đặc quyền (ví dụ: tên người dùng 'postgres') .. Vì vậy, 'su - postgres psql' sẽ cho phép bạn đăng nhập và sửa mật khẩu hoặc ngày hợp lệ.
ericpeter0n

3

Điều đơn giản để làm là đăng nhập bằng psql hoặc pgAdmin và

ALTER USER sam WITH PASSWORD 'new_password';

Bây giờ, nếu bạn không thể đăng nhập bằng tài khoản superuser, bạn có thể khôi phục bằng cách thay đổi cài đặt pg_hba.conf cho người dùng này và tải lại cấu hình (đôi khi tôi thấy điều này yêu cầu khởi động lại máy chủ, nhưng tôi không chắc tại sao).

Những gì bạn có thể làm là thêm một dòng cho phép bạn đăng nhập bằng phương thức nhận dạng (ngang hàng trong 9.2) (nếu bạn có thể sử dụng tài khoản hệ thống cục bộ cùng tên với người dùng) cho các kết nối cục bộ cho người dùng hoặc (nếu điều đó là không thể) được đặt thành "tin tưởng" (rất tạm thời!). Nếu sử dụng niềm tin, hãy đặt lại càng sớm càng tốt, vì điều này có nghĩa là "tin tưởng rằng người dùng là người mà anh ấy / cô ấy tuyên bố!" và do đó, cài đặt này rất nguy hiểm khi được bật ngoài nhu cầu khôi phục ngay lập tức.

Khi bạn đã đăng nhập, bạn có thể đặt lại mật khẩu ở trên.


Không phải pgAdmin thực hiện cùng một lệnh?
dezso

(lưu ý tôi đã nói psql hoặc pgAdmin. Tôi có thể làm gì để làm cho nó rõ ràng hơn?)
Chris Travers

Không - không, tôi chỉ nghĩ rằng việc thay đổi mật khẩu trong GUI cũng giống như vậy. Nếu nó không thể tưởng tượng những gì có thể đi sai?
dezso

Điều gì có thể đi sai? Nhập mật khẩu cho người mới bắt đầu ....
Chris Travers

Không ai có thể chỉ cần đặt lại mật khẩu một lần nữa khi đăng nhập như postgres?
dezso

2

Đối với biến thể Windows - Tôi đã gặp phải lỗi khó chịu này vì pgAdmin cho bản cài đặt Windows x64 phiên bản 9.2 của tôi. Nó làm cho sản xuất của tôi bị tê liệt.

Trong thư mục C:\Program Files\PostgreSQL\9.2\datahoặc C:\Program Files (x86)\PostgreSQL\9.**x**\data, bạn sẽ tìm thấy tệp văn bản pg_hba.conf .

Tìm các dòng sau:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

và thay đổi PHƯƠNG PHÁP md5 thành "tin tưởng" như thế này:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

Từ Windows>Runloại "services.msc" và [enter] tìm đúng phiên bản PostgreSQL và khởi động lại nó.

Bảo mật DB của bạn hiện đang được mở rộng! Chú ý cảnh báo để đưa nó trở lại md5 sau khi thay đổi thời gian hết hạn mật khẩu người dùng để nói năm 2099 cho tất cả người dùng có liên quan.


1

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.

CẬP NHẬT 2016-10-14:

Trên Ubuntu, tên tệp cần thiết là /etc/postgresql/9.5/main/pg_hba.conf. Chỉ dành cho thử nghiệm cục bộ , hãy sửa đổi nó thành như thế này:

...
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
# local   all             all                                     peer
  local   all             all                                     trust
# IPv4 local connections:
# host    all             all             127.0.0.1/32            md5
  host    all             all             127.0.0.1/32            trust

Hai dòng với PHƯƠNG PHÁP "tin cậy" là mới. Chúng cho phép bạn kết nối mà không cần tên người dùng / mật khẩu.

Khi hoàn tất, bạn sẽ cần khởi động lại máy chủ thông qua:

sudo systemctl restart postgresql 

Để pg_hba.confcó hiệu lực, bạn chỉ cần tải lại, không phải khởi động lại. Hơn nữa, đề xuất của bạn có vẻ không đầy đủ vì không rõ nó sẽ giải quyết vấn đề như thế nào.
dezso

1

Tôi chỉ gặp vấn đề tương tự và hóa ra tôi có nhiều người dùng có cùng tên (các trường hợp khác nhau). Khi tôi đã hợp nhất quyền sở hữu và xóa một quyền sở hữu, điều đó ít nhất là rõ ràng. Tùy thuộc vào phương thức kết nối, trường hợp không nhất thiết phải được chuyển để xác thực.

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.