PostgreSQL: thay đổi mật khẩu cho người dùng không hoạt động


9
  • Tôi đã cài đặt PostgreSQLtrên EC2máy và bây giờ tôi muốn thay đổi mật khẩu của người dùngpostgres
  • tôi làm
$ sudo -u postgres psql
psql (9.1.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'newpasswd';
ALTER ROLE
  • Sau đó, tôi thoát khỏi shell và cố gắng đăng nhập bằng mật khẩu mới
$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

PostgreSQLPhiên bản của tôi là

$ psql --version
psql (PostgreSQL) 9.1.5
contains support for command-line editing

Tôi đang làm gì sai?

Cảm ơn bạn

CẬP NHẬT Tôi đã thực hiện các thay đổi pg_hba.confvà đây là giao diện

# 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                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Sau đó tôi khởi động lại postgres

$ sudo /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.1 database server                                                                                                                                               [ OK ] 

Tôi đã thử đăng nhập lại nhưng không thành công.

$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

Có thể mật khẩu cũ vẫn được lưu trong tệp ~ / .pgpass của bạn.

Không, có một dấu nhắc mật khẩu ở đó. Tôi nghĩ rằng pg_hba.confnó được thiết lập theo cách mà nó không chấp nhận xác thực mật khẩu.

@willglynn, vui lòng kiểm tra cập nhật của tôi, nó sẽ bị lỗi một lần nữa ngay cả sau khi thực hiện thay đổi trongpg_hba.conf
daydreamer ngày

Câu trả lời:


9

Giống như willglynn đã nói, có lẽ đó là tệp pg_hba.conf của bạn.

Nếu bạn có dòng sau:

local   all    all     peer

sau đó đổi nó thành:

local   all    all     md5

Điều đó sẽ cho phép bạn đăng nhập bằng mật khẩu mới của mình (giả sử rằng bạn cung cấp đúng) :)


Xin chào @David, tôi đã thử như bạn đã đề cập, nhưng vẫn không thành công, vui lòng kiểm tra cập nhật của tôi như những gì tôi đã làm, cảm ơn bạn
mơ mộng ngày

Vẫn còn một peerdòng áp dụng cho các kết nối cục bộ (ổ cắm tên miền UNIX) từ postgresngười dùng. Điều đó sẽ thất bại trừ khi đầu xa đang chạy với tư cách là postgresngười dùng HĐH . Xem tài liệu pg_hba.conf để hiểu rõ hơn.

Mặc dù tôi đã có thể chạy django manage.py syncdb, tôi vẫn sẽ đọc về pg_hba.conftài liệu mà bạn đã đề cập, cảm ơn rất nhiều vì sự giúp đỡ của bạn
mơ mộng ngày

Tôi chỉ cần thêm-h localhost
Mike

5

Tôi chỉ muốn thêm rằng ngoài việc thay đổi pg_hba.conftập tin từ

local   all    all     peer

đến

local   all    all     md5

Theo câu trả lời được chấp nhận, cách duy nhất tôi có thể đăng nhập sau khi làm điều tương tự mà OP đang làm là vượt qua -hcờ khi cố gắng đăng nhập.

$ psql -U postgres -h localhost

Hy vọng, điều này sẽ giúp được ai đó trong tương lai. Nó đã khiến tôi phát điên!


0

Bạn có cái 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                                     md5

thay đổi bằng cách này:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
#local   all             all                                     md5

và khởi động lại dịch vụ postgresql bằng cách

sudo /etc/init.d/posgresql restart

công việc này cho tôi


Khi thay đổi, pg_hba.confbạn không cần phải khởi động lại Postgres. Tải lại cấu hình là đủ. ví dụ: pg_ctl ... reloadhoặcselect pg_reload_conf()
a_horse_with_no_name

Chỉ cần tải lại ... tôi không biết ... cảm ơn
Israel L Rosas

-1

Đối với những người đang phát điên sau khi thay đổi mật khẩu nhiều lần và thử mọi thứ được đề cập ở đây, hãy nhớ kiểm tra hết hạn hiệu lực của người dùng. Bạn có thể đặt nó thành 'không bao giờ hết hạn' như thế trong psql 9.x:

ALTER ROLE <username> VALID UNTIL 'infinity';

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.