Postgresql: xác thực mật khẩu không thành công cho người dùng Postgres


431

Tôi đã cài đặt PostgreSQL 8.4, Postgres client và PGadmin 3. Xác thực không thành công cho "postgres" của người dùng cho cả máy khách console và PGadmin. Tôi đã gõ người dùng là "postgres" và mật khẩu "postgres", bởi vì nó đã hoạt động trước đây. Nhưng bây giờ xác thực thất bại. Tôi đã làm điều đó trước một vài lần mà không có vấn đề này. Tôi nên làm gì? Và những gì sẽ xảy ra?

psql -U postgres -h localhost -W
Password for user postgres: 
psql: FATAL:  password authentication failed for user "postgres"
FATAL:  password authentication failed for user "postgres"

1
Trong trường hợp của tôi, kết nối không thành công vì mật khẩu quá phức tạp ...
JJD 18/2/2015

3
Hãy chắc chắn để đọc tất cả các cách xuống trang này. Tôi đã phải làm một số điều để làm việc này. Đầu tiên, ALTERbước , sau đó chỉnh sửa pg_hba.conftệp của tôi , sau đó khởi động lại postgres .
elrobis


Cũng đảm bảo rằng bạn không có hai phiên bản Postgres đang chạy: một trên Windows, một trong Docker. Docker đã không báo cáo với tôi rằng cổng đã được sử dụng. Vì vậy, công cụ được kết nối với Postgres của máy Windows, trong khi trong Docker postgers, mọi thứ đều ổn.
koppor

Câu trả lời:


749

Nếu tôi nhớ chính xác, người dùng postgreskhông có mật khẩu DB được đặt trên Ubuntu theo mặc định. Điều đó có nghĩa là, bạn chỉ có thể đăng nhập vào tài khoản đó bằng cách sử postgres dụng tài khoản người dùng HĐH .

Giả sử, bạn có rootquyền truy cập vào hộp bạn có thể làm:

sudo -u postgres psql

Nếu database "postgres" does not existslỗi đó xảy ra, thì rất có thể bạn không ở trên máy chủ Ubuntu hoặc Debian :-) Trong trường hợp này chỉ cần thêm template1vào lệnh:

sudo -u postgres psql template1

Nếu bất kỳ lệnh nào bị lỗi với lỗi psql: FATAL: password authentication failed for user "postgres"thì hãy kiểm tra tệp /etc/postgresql/8.4/main/pg_hba.conf: Phải có một dòng như thế này là dòng không bình luận đầu tiên:

local   all         postgres                          ident

Đối với các phiên bản mới hơn của PostgreSQL identthực sự có thể peer. Điều đó cũng tốt.

Bên trong psqlvỏ bạn có thể cung cấp cho người dùng DB postgres mật khẩu:

ALTER USER postgres PASSWORD 'newPassword';

Bạn có thể rời khỏi psqlshell bằng cách gõ CtrlDhoặc bằng lệnh \q.

Bây giờ bạn sẽ có thể cung cấp cho pgAdmin một mật khẩu hợp lệ cho siêu người dùng DB và nó cũng sẽ rất vui. :-)


Điều đó tốt hơn, cảm ơn bạn! psql đang hoạt động. Nhưng vẫn có vấn đề với pgadmin3 - nó đã hỏi tôi mật khẩu cho người dùng root hệ thống của tôi. (lạ đối với tôi) pg_hba.conf giống như bạn nói.
I159

Tôi muốn thêm vào rồi thoát bảng điều khiển bằng cách sử dụng '\ q'. Mất một lúc tôi mới thấy điều đó :)
hakunin

2
Lưu ý, pg_hba.conf phải có người dùng postgres được đặt để identcác bước đầu tiên hoạt động. Nếu bạn đã đặt nó thành md5 hoặc thứ gì khác, bạn sẽ không thể tự động đăng nhập.
Cerin

80
Một cái rất đẹp Đối với những người dùng mới khác, ĐỪNG QUÊN SEMICOLON ở cuối dòng ALTER USER.
itols

3
@itsols Bạn đã nói: "Rất hay. Đối với những người dùng mới khác, ĐỪNG QUÊN SEMICOLON ở cuối dòng ALTER USER" ... Bạn vừa kết thúc một thử thách bốn giờ !! Tôi cảm thấy rất ngu ngốc và biết ơn ngay bây giờ. :-D
Frozenjim

146

Phản hồi của nhân viên là chính xác, nhưng nếu bạn muốn tự động hóa hơn nữa có thể làm:

$ sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"

Làm xong! Bạn đã lưu Người dùng = postgres và mật khẩu = postgres.

Nếu bạn không có mật khẩu cho người dùng postgres ubfox, hãy làm:

$ sudo passwd postgres


Cẩn thận nếu mật khẩu của bạn chứa các ký tự thú vị như '!'
Brian Peterson

45

Điều này thật khó chịu, hầu hết các câu trả lời trên đều đúng nhưng họ không đề cập đến việc bạn phải khởi động lại dịch vụ cơ sở dữ liệu trước khi những thay đổi trong tệp pg_hba.conf sẽ ảnh hưởng.

vì vậy nếu bạn thực hiện các thay đổi như đã đề cập ở trên:

local all postgres ident

sau đó khởi động lại với quyền root (trên centos của nó giống như dịch vụ khởi động lại dịch vụ postgresql-9.2) bây giờ bạn sẽ có thể truy cập db khi người dùng đăng bài

$psql
psql (9.2.4)
Type "help" for help.

postgres=# 

Hy vọng điều này thêm thông tin cho người dùng postgres mới


25
Trên loại Ubuntu: sudo service postgresql restart
Ann Kilzer 16/12/13

4
để sử dụng RHEL7sudo systemctl restart postgresql.service
Spechal

1
Còn trên mac thì sao?
AustinT

1
Đối với mac, hãy kiểm tra câu hỏi này trên SO stackoverflow.com/questions/7975556/
triệt

Cảm ơn Miguel. Tôi đã xóa mật khẩu theo cách thủ công và pgAdmin của tôi không kết nối với cơ sở dữ liệu cho đến khi tôi khởi động lại máy chủ postgres.
Ustin

20

Chỉnh sửa tệp pg_hba.conf, ví dụ như với sudo emacs /etc/postgresql/9.3/main/pg_hba.conf

Thay đổi tất cả các phương thức xác thực thành trust. Thay đổi mật khẩu Unix cho người dùng "postgres". Khởi động lại máy chủ. Đăng nhập bằng psql -h localhost -U postgresvà sử dụng mật khẩu Unix vừa đặt. Nếu nó hoạt động, bạn có thể đặt lại tệp pg_hba.conf thành các giá trị mặc định.


1
Nếu bạn bị kẹt hoàn toàn, đây là phương pháp duy nhất được đảm bảo. Thay đổi tất cả các phương thức để tin cậy, khởi động lại db, sau đó là root : sudo su - postgres, mật khẩu set / fix / unset tiếp theo cho postgres db (và trong shell, nếu cần), sau đó khôi phục lại để bảo mật md5hoặc identphương thức và khởi động lại để giá trị được giữ lại. Nhân tiện, trên Cent / RedHat 9.4, tập tin được đặt tại:/var/lib/pgsql/9.4/data/pg_hba.conf
PapaK

17

Đối với những người đang sử dụng lần đầu tiên và không có thông tin liên quan đến mật khẩu là gì, họ có thể làm theo các bước dưới đây (giả sử bạn đang sử dụng Ubuntu):

  1. Mở tệp pg_hba.conf trong/etc/postgresql/9.x/main

     sudo vi pg_hba.conf 

    2.edit dòng dưới đây

     local   all             postgres                                peer

    đến

     local   all             postgres                                trust
  2. Khởi động lại máy chủ

      sudo service postgresql restart
  3. Cuối cùng, bạn có thể đăng nhập mà không cần mật khẩu như trong hìnhCuối cùng, bạn có thể đăng nhập mà không cần mật khẩu như trong hình

Tham khảo tại đây để biết thêm


12

Nếu bạn đang cố gắng đăng nhập shell postgres với tư cách là người dùng postgres, thì bạn có thể sử dụng các lệnh sau.

chuyển sang người dùng postgres

# su - postgres

đăng nhập vào psql

# psql

Mong rằng sẽ giúp


3
su - postgresyêu cầu mật khẩu trên posgresql 9.5 trên Ubuntu 16.04
Prashanth Chandra

3
su - postgreslà lệnh mà tài liệu fedora chính thức gợi ý , nhưng tôi cũng nhận được lời nhắc mật khẩu. Để có được vòng mà tôi đã theo dõi email diễn đàn postgres này sử dụng lệnh tương tự như câu trả lời được chấp nhận ở đây : sudo -u postgres psql. Đừng quên init và khởi động máy chủ cơ sở dữ liệu.
icc97

11

Cố gắng không sử dụng tham số -W và để trống mật khẩu. Đôi khi người dùng được tạo mà không có mật khẩu.

Nếu không được, hãy đặt lại mật khẩu. Có một số cách để làm điều đó, nhưng cách này hoạt động trên nhiều hệ thống:

$ su root
$ su postgres
$ psql -h localhost
> ALTER USER postgres with password 'YourNewPassword';

7

Như một quy tắc tự nhiên: BẠN KHÔNG BAO GIỜ ĐƯỢC THIẾT LẬP MỘT MẬT KHẨU CHO NGƯỜI DÙNG BÀI VIẾT .

Nếu bạn cần quyền truy cập siêu người dùng từ pgAdmin, hãy tạo một siêu người dùng khác. Bằng cách đó, nếu thông tin đăng nhập cho siêu người dùng đó bị xâm phạm, bạn luôn có thể ssh vào máy chủ cơ sở dữ liệu thực tế và xóa thủ công siêu người dùng bằng cách sử dụng

sudo -u postgres -c "DROP ROLE superuser;"

1
Lý do cho quy tắc này là gì?
Gershom

2
Vì vậy, bạn không bao giờ có thể có tất cả các siêu nhân của bạn thuyết phục.
ardilgulez

1
Làm thế nào có thể thiết lập một mật khẩu cho postgres dẫn đến việc tất cả các siêu nhân bị xâm phạm?
Gershom

4
cài đặt mật khẩu không dẫn đến việc tất cả các siêu nhân bị xâm phạm nhưng không đặt mật khẩu sẽ đảm bảo rằng bạn sẽ không bao giờ có tất cả các siêu nhân bị xâm phạm. Lý do là: khi bạn không đặt mật khẩu, mọi nỗ lực đăng nhập mật khẩu để đăng người dùng sẽ bị từ chối trong khi bạn vẫn có thể tự mình sử dụng nó.
ardilgulez

7

Khi bạn đang ở trong vỏ postgres của mình, hãy nhập lệnh này

postgres=# \password postgres

Sau khi nhập lệnh này, bạn sẽ được nhắc đặt mật khẩu, chỉ cần đặt mật khẩu và sau đó thử.


3

Khi bạn cài đặt postgresql, không có mật khẩu nào được đặt cho người dùng postgres, bạn phải đặt nó một cách rõ ràng trên Unix bằng cách sử dụng lệnh:

sudo passwd postgres

Nó sẽ hỏi mật khẩu sudo của bạn và sau đó quảng cáo cho bạn mật khẩu người dùng postgres mới. Nguồn


0

Tôi chỉ muốn thêm rằng bạn cũng nên kiểm tra xem mật khẩu của bạn đã hết hạn chưa.

Xem xác thực mật khẩu Postgres để biết chi tiết.


1
Vui lòng thêm một số chi tiết và tóm tắt về những gì liên kết đó cung cấp trong trường hợp trong tương lai liên kết không còn tồn tại. Nếu không, điều này có khả năng được gắn cờ là câu trả lời chỉ có chất lượng thấp / liên kết.
Tanner

Tôi đã đọc về điều này: meta.stackexchange.com/questions/8231/ Kẻ
Tanner

0

Dưới đây là một số kết hợp mà tôi đã cố gắng đăng nhập:

# login via user foo
psql -Ufoo -h localhost

sudo -u postgres psql postgres

# user foo login to postgres db
psql -Ufoo -h localhost -d postgres

0

Tôi đã có một vấn đề tương tự. Ubuntu đã để lại cho tôi đăng nhập trong bảng điều khiển với bất kỳ mật khẩu nào cho siêu người dùng. Ngoại trừ khi tôi kết nối với -h localhost trong lệnh dòng psql.

Tôi cũng đã quan sát rằng "localhost: 8080 / MyJSPSiteLogIn" - đã hiển thị: Lỗi nghiêm trọng: lỗi tự động với người dùng "người dùng".

pg_hba.conf đã ổn.

Tôi lưu ý rằng có hai phiên bản postgres chạy trong cùng một dịch vụ.

Đã giải quyết - gỡ cài đặt phiên bản inutil.


0

Tôi đã phải đối mặt với vấn đề tương tự. Trong khi truy cập bất kỳ cơ sở dữ liệu nào, tôi đã nhận được dấu nhắc bên dưới sau khi cập nhật mật khẩu "xác thực mật khẩu không thành công cho người dùng, postgres," trong PGAdmin


Giải pháp:

  1. Tắt máy chủ postgres
  2. Chạy lại pgadmin
  3. pgadmin sẽ yêu cầu mật khẩu.
  4. Vui lòng nhập mật khẩu hiện tại của người dùng được đề cập

Hy vọng nó sẽ giải quyết vấn đề của bạn

nhập mô tả hình ảnh ở đây


-1

Tôi hy vọng điều này sẽ giúp bạn trong thời gian ngắn. Bạn có thể thay đổi mật khẩu của postgres sql bằng cách sử dụng lệnh bellow.

Chỉ huy

sudo -u postgres psql

Và tiếp theo bạn có thể cập nhật mật khẩu

Chỉ huy

Thay đổi mật khẩu người dùng thay đổi mật khẩu 'YOU_NEW_PASSWORD';


1
Câu trả lời của bạn chỉ chứa thông tin, đã được thêm vào: stackoverflow.com/a/7696398/8283469
L. Guthardt
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.