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"
pelamun
sumber
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) :)

David S
sumber
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!

JTG
sumber
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

Israel L Rosas
sumber
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';
Kirpit
sumber