PostgreSQL: mengubah kata sandi untuk pengguna tidak berfungsi


9
  • Saya menginstal PostgreSQLpada EC2mesin dan sekarang saya ingin mengubah kata sandi penggunapostgres
  • Saya lakukan
$ sudo -u postgres psql
psql (9.1.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'newpasswd';
ALTER ROLE
  • Kemudian saya keluar dari shell dan mencoba masuk dengan kata sandi baru
$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

PostgreSQLVersi saya adalah

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

Apa yang saya lakukan salah?

Terima kasih

PEMBARUAN Saya membuat perubahan pg_hba.confdan beginilah tampilannya sekarang

# 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

Kemudian saya memulai kembali postgres

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

Saya mencoba masuk lagi, tetapi gagal

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

Mungkin kata sandi lama masih tersimpan di file ~ / .pgpass Anda.

Nah, ada prompt kata sandi di sana. Saya pikir pg_hba.confini diatur sedemikian rupa sehingga tidak menerima otentikasi kata sandi.

@willglynn, silakan periksa pembaruan saya, itu gagal lagi bahkan setelah membuat perubahan dipg_hba.conf
— daydreamer

Jawaban:


9

Seperti yang dikatakan willglynn, ini mungkin file pg_hba.conf Anda.

Jika Anda memiliki baris berikut:

local   all    all     peer

lalu ubah ke:

local   all    all     md5

Itu akan membuat Anda masuk dengan kata sandi baru Anda (dengan asumsi Anda memasukkannya dengan benar) :)


Hai @ David, saya mencoba seperti yang Anda sebutkan, tetapi masih gagal, silakan periksa pembaruan saya seperti yang saya lakukan, terima kasih
— daydreamer

Masih ada peergaris yang berlaku untuk koneksi lokal (soket domain UNIX) dari postgrespengguna. Itu akan gagal kecuali ujung yang jauh berjalan sebagai postgrespengguna OS . Lihat dokumentasi pg_hba.conf untuk pemahaman yang lebih baik.

Meskipun saya dapat menjalankan django manage.py syncdb, saya masih akan membaca tentang pg_hba.confdokumentasi yang Anda sebutkan, terima kasih banyak atas bantuan Anda
— daydreamer

Saya hanya perlu menambahkan-h localhost
— Mike

5

Saya hanya ingin menambahkan itu selain mengubah pg_hba.conffile dari

local   all    all     peer

untuk

local   all    all     md5

Sesuai jawaban yang diterima, satu-satunya cara saya bisa masuk setelah melakukan hal yang sama OP lakukan adalah untuk melewati -hbendera ketika mencoba masuk.

$ psql -U postgres -h localhost

Semoga ini akan membantu seseorang di masa depan. Itu membuatku gila!


0

Kamu punya ini...

# 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

ubah dengan ini:

# 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

dan restart layanan postgresql dengan

sudo /etc/init.d/posgresql restart

ini bekerja untuk saya


Saat mengubah pg_hba.confAnda tidak perlu me-restart Postgres. Memuat ulang konfigurasi sudah cukup. misalnya pg_ctl ... reloadatauselect pg_reload_conf()
— a_horse_with_no_name

Hanya memuat ulang ... saya tidak tahu ... terima kasih
— Israel L Rosas

-1

Untuk orang-orang, yang menjadi gila setelah mengganti kata sandi berkali-kali dan mencoba semua yang disebutkan di sini, ingatlah untuk memeriksa masa berlaku validitas pengguna. Anda dapat mengaturnya ke 'tidak pernah kedaluwarsa' seperti itu di psql 9.x:

ALTER ROLE <username> VALID UNTIL 'infinity';

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.