ketika saya membuat pengguna baru, tetapi tidak bisa masuk ke database.
Saya melakukan itu seperti ini:
postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
lalu buat database:
postgres@Aspire:/home/XXX$ createdb -O dev test_development
setelah itu, saya mencoba psql -U dev -W test_development
login, tetapi mendapatkan error:
psql: FATAL: Peer authentication failed for user "dev"
Saya mencoba menyelesaikan masalah tetapi gagal.
postgresql
hsming
sumber
sumber
--interactive
perintah:createuser --interactive joe
Jawaban:
Mencoba:
dimana
-U
adalah nama pengguna basis data-h
adalah nama host / IP server lokal, sehingga menghindari soket domain Unix-d
adalah nama basis data untuk terhubungIni kemudian dievaluasi sebagai koneksi "jaringan" oleh Postgresql daripada koneksi soket domain Unix, sehingga tidak dievaluasi sebagai koneksi "lokal" seperti yang Anda lihat di
pg_hba.conf
:sumber
psql [option...] [dbname [username]]
, jadi Anda akan berpikirpsql dbname username
hanya akan berhasil ..\c glossary john
FATAL: Peer authentication failed for user "john"
kemudian dengan\c glossary john localhost
Password for user john:
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
You are now connected to database "glossary" as user "john" on host "localhost" at port "5432".
itu berhasil.Koneksi Anda gagal karena secara default
psql
menghubungkan melalui soket UNIX menggunakanpeer
otentikasi, yang mengharuskan pengguna UNIX saat ini memiliki nama pengguna yang samapsql
. Jadi, Anda harus membuat pengguna UNIXdev
dan kemudian login sebagaidev
atau gunakansudo -u dev psql test_development
untuk mengakses database (dan tidakpsql
harus meminta kata sandi).Jika Anda tidak dapat atau tidak ingin membuat pengguna UNIX, seperti jika Anda hanya ingin terhubung ke database Anda untuk permintaan ad hoc , memaksa koneksi soket menggunakan
psql --host=localhost --dbname=test_development --username=dev
(seperti yang ditunjukkan oleh @meyerson jawaban) akan menyelesaikan masalah langsung Anda.Tetapi jika Anda bermaksud memaksakan otentikasi kata sandi pada soket Unix alih-alih metode peer, coba ubah
pg_hba.conf
baris * berikut ini :dari
untuk
peer
berarti akan mempercayai identitas (keaslian) pengguna UNIX. Jadi tidak meminta kata sandi.md5
berarti akan selalu meminta kata sandi, dan memvalidasi setelah hashing denganMD5
.Anda dapat, tentu saja, juga membuat aturan yang lebih spesifik untuk basis data atau pengguna tertentu, dengan beberapa pengguna memiliki
peer
dan lainnya memerlukan kata sandi.Setelah mengubah
pg_hba.conf
jika PostgreSQL berjalan, Anda harus membuatnya membaca ulang konfigurasi dengan memuat ulang (pg_ctl reload
) atau memulai ulang (sudo service postgresql restart
).* File
pg_hba.conf
kemungkinan besar akan berada di/etc/postgresql/9.x/main/pg_hba.conf
Diedit: Komentar dari @Chloe, @JavierEH, @Jonas Eicher, @fccoelho, @Joanis, @Uphill_What komentar dimasukkan ke dalam jawaban.
sumber
peer
DANmd5
? Ketika saya aturmd5
, maka saya tidak bisa lagi login denganpostgres
pengguna! Saya mencoba menambahkan beberapa baris, dan memisahkan metode dengan koma, tetapi mereka tidak berhasil. Ok saya menemukanmgoldwasser
jawaban dan itu berhasil. Saya baru saja menambahkan baris lain untuk penggunapostgres
dengan metodepeer
!/var/lib/pgsql/9.4/data/pg_hba.conf
Otentikasi rekan berarti bahwa postgres meminta sistem operasi untuk nama login Anda dan menggunakannya untuk otentikasi. Untuk masuk sebagai pengguna "dev" menggunakan otentikasi rekan pada postgres, Anda juga harus menjadi pengguna "dev" di sistem operasi.
Anda dapat menemukan detail metode otentikasi dalam dokumentasi Postgresql .
Petunjuk: Jika tidak ada metode otentikasi yang berfungsi lagi, putuskan sambungan server dari jaringan dan gunakan metode "trust" untuk "localhost" (dan periksa kembali apakah server Anda tidak dapat dijangkau melalui jaringan saat metode "trust" diaktifkan).
sumber
dev
pengguna sistemXXX
Ketika Anda menentukan:
itu terhubung melalui UNIX Socket, yang secara default menggunakan
peer
otentikasi, kecuali ditentukanpg_hba.conf
lain.Anda dapat menentukan:
untuk mendapatkan koneksi TCP / IP pada antarmuka loopback (baik IPv4 dan IPv6) untuk yang ditentukan
database
danuser
.Setelah perubahan, Anda harus memulai ulang postgres atau memuat ulang konfigurasinya. Mulai ulang yang seharusnya berfungsi di distro modern berbasis RHEL / Debian:
Muat ulang harus bekerja dengan cara berikut:
tetapi perintah mungkin berbeda tergantung dari konfigurasi PATH - Anda mungkin harus menentukan path absolut, yang mungkin berbeda, tergantung pada cara postgres diinstal.
Maka Anda dapat menggunakan:
untuk login dengan yang
user
ditentukandatabase
melalui TCP / IP.md5
singkatan kata sandi terenkripsi, sementara Anda juga dapat menentukanpassword
kata sandi teks biasa selama otorisasi. 2 pilihan ini seharusnya tidak menjadi masalah besar selama server database hanya dapat diakses secara lokal, tanpa akses jaringan.Catatan penting: Urutan definisi dalam
pg_hba.conf
masalah - aturan dibaca dari atas ke bawah, seperti iptables, jadi Anda mungkin ingin menambahkan aturan yang diusulkan di atas aturan:sumber
Sementara jawaban @ flaviodesousa akan berfungsi, itu juga membuatnya wajib bagi semua pengguna (semua orang) untuk memasukkan kata sandi.
Kadang masuk akal untuk menjaga otentikasi rekan untuk orang lain, tetapi buat pengecualian untuk pengguna layanan. Dalam hal ini Anda ingin menambahkan baris ke pg_hba.conf yang terlihat seperti:
Saya akan merekomendasikan agar Anda menambahkan baris ini tepat di bawah baris tajuk komentar:
Anda perlu me-restart menggunakan PostgreSQL
Jika Anda menggunakan 9.3, pg_hba.conf Anda kemungkinan besar adalah:
sumber
Ini bekerja untuk saya ketika saya menabraknya:
sumber
dev
,.Solusi termudah:
sumber
Saya hanya perlu menambahkan
-h localhost
sumber
Dalam kasus saya, saya menggunakan port yang berbeda. Defaultnya adalah 5432. Saya menggunakan 5433. Ini berfungsi untuk saya:
sumber
Bagi orang-orang di masa depan melihat ini,
postgres
ada di/usr/lib/postgresql/10/bin
server Ubuntu saya.Saya menambahkannya ke PATH di file .bashrc saya, dan tambahkan baris ini di akhir
kemudian pada baris perintah
Saya menyegarkan kembali lingkungan bash saya. Sekarang saya dapat menggunakan
postgres -D /wherever
dari direktori mana punsumber
pg_dump -h localhost -U postgres -F c -b -v -f mydb.backup mydb
sumber
-U postgres
sangat penting? Apa semua orang lari-surat , sih?Mencoba:
psql -U role_name -d database -h hostname..com -W
sumber