Pengguna PostgreSQL tidak dapat terhubung ke server setelah mengubah kata sandi

10

Saya telah bertemu ini dengan 4 peran yang saya buat:
Setelah mengubah kata sandi untuk pengguna di pgAdmin III menggunakan GUI (1), pengguna itu tidak dapat login lagi.
pgAdmin III tampilkan pesan kesalahan:

An error has occurred:

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

Sistem saya: Postgresql 9.2 di Ubuntu 12.04

Apakah ada cara untuk memperbaikinya?

(1): masuk dengan postgres akun, klik kanan pengguna di Peran Masuk, buka tab 'Definisi' dan masukkan kata sandi

Cao Minh Tu
sumber

Jawaban:

15

Mungkin Anda digigit bug PgAdmin ini ( changelog ):

2012-11-28 AV 1.16.1 Kontrol pemilih tanggal mengembalikan stempel waktu penuh secara default, yang dapat menyebabkan perubahan tanggal yang tidak disengaja pada pekerjaan dan tanggal validitas peran. Abaikan bagian waktu.

Bug ini telah terlihat menetapkan tanggal kedaluwarsa kata sandi jauh sebelumnya, seperti 1/1/1970. Dalam hal ini pesan kesalahan saat mencoba menghubungkan tidak berbeda dengan kata sandi yang salah.

Anda dapat memeriksa tanggal kedaluwarsa ini dengan:

SELECT usename,valuntil FROM pg_user;

dan jika salah, atur ulang dengan:

ALTER USER username VALID UNTIL 'infinity';

dan tingkatkan pgAdmin.

Daniel Vérité
sumber
Terima kasih banyak! Ini memecahkan masalah. Setiap kali saya mereset kata sandi pengguna, pgAdmin mengatur valid hingga waktu 01-01-1970 sehingga pengguna tidak dapat masuk lagi.
Cao Minh Tu
kamu mengerti! bug sialan
Carter Cole
Bagaimana tepatnya saya harus masuk ke psql ??? Itulah peran yang baru saja saya perbarui.
ericpeters0n
1
@ ericpeters0n: untuk sementara waktu beralih metode otentikasi ke trustatau peerdalam pg_hba.conffile untuk akun ini.
Daniel Vérité
Terima kasih, sudah beres. Bagi mereka yang datang kemudian, "trust" berarti bahwa: Setelah Anda me-restart postgres, Anda dapat menjalankan psql tanpa otentikasi kata sandi jika Anda adalah pengguna dengan nama yang sama dengan pengguna istimewa (mis. Nama pengguna 'postgres') .. Jadi, 'su - postgres psql' akan memungkinkan Anda untuk masuk dan memperbaiki kata sandi atau tanggal yang valid.
ericpeters0n
3

Hal sederhana yang harus dilakukan adalah masuk dengan psql atau pgAdmin dan

ALTER USER sam WITH PASSWORD 'new_password';

Sekarang, jika Anda tidak dapat masuk dengan akun superuser, Anda dapat memulihkan dengan mengubah pengaturan pg_hba.conf untuk pengguna ini dan memuat ulang konfigurasi (kadang-kadang saya menemukan ini memerlukan restart server, tetapi saya tidak yakin mengapa).

Yang dapat Anda lakukan adalah menambahkan baris yang memungkinkan Anda untuk masuk menggunakan metode ident (peer in 9.2) (jika Anda dapat menggunakan akun sistem lokal dengan nama yang sama dengan pengguna) untuk koneksi lokal untuk pengguna, atau (jika itu tidak mungkin) atur ke "trust" (sangat sementara!). Jika menggunakan kepercayaan, kembalilah sesegera mungkin, karena ini berarti "percaya bahwa pengguna adalah yang dia klaim!" dan akibatnya pengaturan ini berbahaya untuk dibiarkan diaktifkan di luar kebutuhan pemulihan segera.

Setelah masuk, Anda dapat mengatur ulang kata sandi di atas.

Chris Travers
sumber
Bukankah seharusnya pgAdmin melakukan perintah yang sama?
dezso
(mencatat saya katakan psql atau pgAdmin. Apa yang bisa saya lakukan untuk membuatnya lebih jelas?)
Chris Travers
Tidak-tidak, saya hanya berpikir bahwa mengubah kata sandi di GUI tidak persis sama. Jika ya, saya tidak bisa membayangkan apa yang salah?
dezso
Apa yang bisa salah? Kesalahan ketik pada kata sandi untuk permulaan ....
Chris Travers
Tidak bisakah seseorang dengan mudah mengatur kata sandi sekali lagi login sebagai postgres?
dezso
2

Untuk varian Windows - Saya juga mengalami bug jahat ini karena pgAdmin untuk instal Windows x64 versi 9.2. Itu membuat produksi saya lumpuh.

Di folder C:\Program Files\PostgreSQL\9.2\dataatau C:\Program Files (x86)\PostgreSQL\9.**x**\data, Anda akan menemukan file teks pg_hba.conf .

Temukan baris berikut:

# 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

dan ubah METHOD md5 menjadi "trust" seperti ini:

# 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

Dari Windows>Runjenis "services.msc" dan [enter] temukan instance PostgreSQL yang tepat dan mulai ulang.

Keamanan DB Anda sekarang terbuka lebar! Perhatikan peringatan untuk mengembalikannya kembali ke md5 setelah mengubah kata sandi kadaluwarsa untuk mengatakan tahun 2099 untuk semua pengguna yang relevan.

Hoang Do
sumber
1

Jika Anda belum mencoba ini, tinjau file pg_hba.conf Anda. Ini akan dinamai sesuatu seperti /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); Anda mungkin harus menggunakan 'find / -name pg_hba.conf' untuk menemukannya.

Di bagian bawah file, ubah nilai 'METHOD' menjadi 'trust' untuk pengujian lokal (lihat dokumen postgres untuk informasi lengkap). Nyalakan ulang mesin untuk memastikan semuanya mulai bersih dan params baru dibaca.

Semoga ini akan menyembuhkan kesengsaraan Anda. Ini memecahkan masalah saya pada Fedora 20 dengan PostgreSQL 9.3.

UPDATE 2016-10-14:

Di Ubuntu, nama file yang dibutuhkan adalah /etc/postgresql/9.5/main/pg_hba.conf. Hanya untuk pengujian lokal , modifikasi agar terlihat seperti 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                                     trust
# IPv4 local connections:
# host    all             all             127.0.0.1/32            md5
  host    all             all             127.0.0.1/32            trust

Dua baris dengan METODE "kepercayaan" adalah baru. Mereka memungkinkan Anda untuk terhubung tanpa nama pengguna / kata sandi.

Setelah selesai, Anda harus me-restart server melalui:

sudo systemctl restart postgresql 
Alan Thompson
sumber
Agar pg_hba.confberlaku, Anda hanya perlu memuat ulang, bukan memulai ulang. Selain itu, saran Anda terlihat tidak lengkap karena tidak jelas bagaimana akhirnya akan menyelesaikan masalah.
dezso
1

Saya baru saja mengalami masalah yang sama dan ternyata saya memiliki banyak pengguna dengan nama yang sama (kasus yang berbeda). Setelah saya menggabungkan kepemilikan dan menghapus satu, itu setidaknya jelas. Bergantung pada metode koneksi, kasing tidak perlu ditransfer untuk otentikasi.

George
sumber