psql: FATAL: การพิสูจน์ตัวตนล้มเหลวสำหรับผู้ใช้“ postgres”


372

ฉันได้ติดตั้ง PostgreSQL และ pgAdminIII บนกล่อง Ubuntu Karmic ของฉันแล้ว

ฉันสามารถใช้ pgAdminIII ได้สำเร็จ (เช่นเชื่อมต่อ / ล็อกออน) อย่างไรก็ตามเมื่อฉันพยายามลงชื่อเข้าใช้เซิร์ฟเวอร์โดยใช้ชื่อผู้ใช้ / pwd เดียวกันบนบรรทัดคำสั่ง (โดยใช้ psql) ฉันได้รับข้อผิดพลาด:

psql: FATAL:  Ident authentication failed for user "postgres"

มีใครบ้างตอนนี้ที่จะแก้ไขปัญหานี้หรือไม่?


การโพสต์ส
แต็คโอเวอร์โฟลว์

คำตอบ:


194

คุณตั้งค่าที่เหมาะสมใน pg_hba.conf หรือไม่

ดูhttps://help.ubuntu.com/stable/serverguide/postgresql.htmlวิธีดำเนินการ


36
มันไม่ได้ผลสำหรับฉัน ฉันใช้เวลาหลายชั่วโมงกับมัน! สิ่งที่ฉันต้องการทำคือรันคำสั่ง psql ในเทอร์มินัลของฉัน ฉันต้องทำอย่างไรเพื่อให้ไฟล์มีลักษณะเช่นนี้ ??
ฌอน

54
@SeanA คุณต้องการบางสิ่งเช่น 'sudo -u postgres psql'
JLarky

8
อย่าลืม ';' ในตอนท้ายของทุกคำสั่งใน psql ฟังดูงี่เง่า แต่มันเกิดขึ้นฮิฮิ
omrsin

42
@Robert: "postgresql เป็น db ที่ไม่เป็นมิตรกับผู้ใช้มากที่สุด"? ลองใช้ Oracle สักวันเพื่อรับมุมมอง ... :)
mivk

5
สำหรับผู้ที่ใช้รางฉันต้องตั้งค่า pg_hba.conf และเปลี่ยน 'ident' เป็น 'รหัสผ่าน' การเปลี่ยนเป็นความน่าเชื่อถือไม่ทำงาน
Abe Petrillo

412

ขั้นตอนต่อไปนี้ใช้สำหรับการติดตั้ง postgres 9.1 บน Ubuntu 12.04 ใหม่ (ทำงานสำหรับ postgres 9.3.9 บน Ubuntu 14.04 ด้วย)

โดยค่าเริ่มต้น postgres จะสร้างชื่อผู้ใช้ 'postgres' เราลงชื่อเข้าใช้ด้วยชื่อของเธอและให้รหัสผ่านแก่เธอ

$ sudo -u postgres psql
\password
Enter password: ...
...

ออกจากระบบของpsqlโดยการพิมพ์หรือ\q ctrl+dจากนั้นเราเชื่อมต่อเป็น 'postgres' -h localhostส่วนหนึ่งเป็นสิ่งสำคัญ : จะบอกpsqlลูกค้าว่าเราต้องการที่จะเชื่อมต่อโดยใช้การเชื่อมต่อ TCP (ซึ่งถูกกำหนดให้ใช้ตรวจสอบรหัสผ่าน) และไม่ได้โดยการเชื่อมต่อ PEER (ซึ่งไม่เกี่ยวกับการดูแลรหัสผ่าน)

$ psql -U postgres -h localhost

13
หากคุณตั้งค่าPGHOST=localhostคุณไม่จำเป็นต้องระบุ-hตัวเลือกทุกครั้ง นี้ยังทำงานร่วมกับคนอื่น ๆคำสั่งเช่นpg_* pg_dump
Sameer

1
มันไม่บันทึกไว้ในที่นี่: help.ubuntu.com/12.04/serverguide/postgresql.html
Hendra Uzia

2
นี่เป็นสิ่งจำเป็นเพื่อเปิดใช้งานการติดตั้ง Mediawiki บน Debian ด้วย PostgreSQL
mivk

2 ปีต่อมาและฉันต้องทำสิ่งนี้บนMacด้วย
Manav

1
ไม่ดีเนื่องจากมีปัญหาด้านความปลอดภัยโปรดดูที่นี่: serverfault.com/questions/110154/…
Erdinc Ay

161

แก้ไขไฟล์/etc/postgresql/8.4/main/pg_hba.confและแทนที่identหรือpeerโดยอย่างใดอย่างหนึ่งmd5หรือtrustขึ้นอยู่กับว่าคุณต้องการที่จะขอรหัสผ่านในคอมพิวเตอร์ของคุณเองหรือไม่ จากนั้นโหลดไฟล์การกำหนดค่าใหม่ด้วย:

/etc/init.d/postgresql reload

4
หนึ่งคำสั่งรีสตาร์ท postgresql: /etc/init.d/postgresql รีสตาร์ท
Tyler Long

14
ทำไมต้องรีสตาร์ทเมื่อโหลดซ้ำเป็นสิ่งที่คุณต้องการ?
Frank Heikens

ในกรณีนี้: "/etc/init.d/postgresql-8.4 reload"
shaytac

1
อันนี้ใช้ได้สำหรับฉัน เปลี่ยนจากเพียร์เป็น md5 ก็เพียงพอแล้ว
Jonatas CD

1
ตกลงฉันเป็น postgresql noob แต่ฉันต้องรายงานว่าใช้restartงานได้สำหรับฉันเท่านั้นไม่ใช่reload--- หลังจากการเปลี่ยนแปลง/etc/postgresql/9.5/main/pg_hba.conf(เปลี่ยนpeerเป็นtrust)
Mike O'Connor

91

คุณได้รับข้อผิดพลาดนี้เนื่องจากคุณไม่ผ่านการตรวจสอบสิทธิ์ไคลเอ็นต์ ตามข้อความแสดงข้อผิดพลาดคุณอาจมีการกำหนดค่า postgres เริ่มต้นซึ่งตั้งค่าวิธีการรับรองความถูกต้องของไคลเอ็นต์เป็น "IDENT" สำหรับการเชื่อมต่อ PostgreSQL ทั้งหมด

คุณควรอ่านส่วนที่19.1 การรับรองความถูกต้องของลูกค้าในคู่มือ PostgreSQLเพื่อทำความเข้าใจการตั้งค่าการรับรองความถูกต้องได้ดีขึ้น (สำหรับแต่ละเร็กคอร์ดในpg_hba.conf ) แต่นี่เป็นตัวอย่างที่เกี่ยวข้องเพื่อช่วยแก้ไขปัญหาที่คุณมี (จากคู่มือ 9.5 รุ่น ):

วางใจ

อนุญาตการเชื่อมต่อโดยไม่มีเงื่อนไข วิธีนี้อนุญาตให้ทุกคนที่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูล PostgreSQL เพื่อเข้าสู่ระบบในฐานะผู้ใช้ PostgreSQL ที่พวกเขาต้องการโดยไม่ต้องใช้รหัสผ่านหรือการพิสูจน์ตัวตนอื่น ๆ ดูหัวข้อ 19.3.1 สำหรับรายละเอียด

ปฏิเสธ

ปฏิเสธการเชื่อมต่อโดยไม่มีเงื่อนไข สิ่งนี้มีประโยชน์สำหรับ "การกรอง" โฮสต์บางตัวจากกลุ่มตัวอย่างเช่นสายการปฏิเสธสามารถบล็อกโฮสต์ที่เฉพาะเจาะจงจากการเชื่อมต่อในขณะที่บรรทัดต่อมาจะอนุญาตให้โฮสต์ที่เหลืออยู่ในเครือข่ายเฉพาะเชื่อมต่อ

md5

ต้องการให้ไคลเอนต์จัดหารหัสผ่านแฮชสอง MD5 สำหรับการตรวจสอบสิทธิ์ ดูหัวข้อ 19.3.2 สำหรับรายละเอียด

รหัสผ่าน

ต้องการให้ไคลเอ็นต์ระบุรหัสผ่านที่ไม่ได้เข้ารหัสเพื่อการตรวจสอบ เนื่องจากรหัสผ่านถูกส่งเป็นข้อความที่ชัดเจนบนเครือข่ายจึงไม่ควรใช้รหัสนี้กับเครือข่ายที่ไม่น่าเชื่อถือ ดูหัวข้อ 19.3.2 สำหรับรายละเอียด

GSS

ใช้ GSSAPI เพื่อตรวจสอบสิทธิ์ผู้ใช้ สิ่งนี้ใช้ได้สำหรับการเชื่อมต่อ TCP / IP เท่านั้น ดูหัวข้อ 19.3.3 สำหรับรายละเอียด

SSPI

ใช้ SSPI เพื่อตรวจสอบสิทธิ์ผู้ใช้ มีเฉพาะใน Windows เท่านั้น ดูหัวข้อ 19.3.4 สำหรับรายละเอียด

ident

จัดหาชื่อผู้ใช้ระบบปฏิบัติการของไคลเอ็นต์โดยติดต่อเซิร์ฟเวอร์ ident บนไคลเอ็นต์และตรวจสอบว่าตรงกับชื่อผู้ใช้ฐานข้อมูลที่ร้องขอหรือไม่ การพิสูจน์ตัวตนของ Ident สามารถใช้กับการเชื่อมต่อ TCP / IP เท่านั้น เมื่อระบุไว้สำหรับการเชื่อมต่อท้องถิ่นการตรวจสอบสิทธิ์จะถูกนำมาใช้แทน ดูหัวข้อ 19.3.5 สำหรับรายละเอียด

เพียร์

รับชื่อผู้ใช้ระบบปฏิบัติการของลูกค้าจากระบบปฏิบัติการและตรวจสอบว่าตรงกับชื่อผู้ใช้ฐานข้อมูลที่ร้องขอ สิ่งนี้มีให้สำหรับการเชื่อมต่อในท้องถิ่นเท่านั้น ดูหัวข้อ 19.3.6 สำหรับรายละเอียด

LDAP

พิสูจน์ตัวตนโดยใช้เซิร์ฟเวอร์ LDAP ดูรายละเอียดในหัวข้อ 19.3.7

รัศมี

พิสูจน์ตัวตนโดยใช้เซิร์ฟเวอร์ RADIUS ดูหัวข้อ 19.3.8 สำหรับรายละเอียด

ใบรับรอง

พิสูจน์ตัวตนโดยใช้ใบรับรองไคลเอ็นต์ SSL ดูหัวข้อ 19.3.9 สำหรับรายละเอียด

แพม

พิสูจน์ตัวตนโดยใช้บริการ Pluggable Authentication Modules (PAM) ที่จัดเตรียมโดยระบบปฏิบัติการ ดูหัวข้อ 19.3.10 สำหรับรายละเอียด

ดังนั้น ... เพื่อแก้ปัญหาที่คุณประสบอยู่คุณสามารถทำอย่างใดอย่างหนึ่งต่อไปนี้:

  1. เปลี่ยนวิธีการตรวจสอบ (s) ที่กำหนดไว้ในของคุณpg_hba.conf ไฟล์trust, md5หรือpassword(ขึ้นอยู่กับการรักษาความปลอดภัยและความเรียบง่ายความต้องการของคุณ) สำหรับบันทึกการเชื่อมต่อท้องถิ่นที่คุณได้กำหนดไว้ในการมี

  2. อัปเดตpg_ident.confเพื่อแมปผู้ใช้ระบบปฏิบัติการของคุณกับผู้ใช้ PostgreSQL และให้สิทธิ์การเข้าถึงที่สอดคล้องกันขึ้นอยู่กับความต้องการของคุณ

  3. ปล่อยให้การตั้งค่า IDENT อยู่คนเดียวและสร้างผู้ใช้ในฐานข้อมูลของคุณสำหรับผู้ใช้ระบบปฏิบัติการแต่ละรายที่คุณต้องการให้สิทธิ์การเข้าถึง หากผู้ใช้ได้รับการรับรองความถูกต้องแล้วโดยระบบปฏิบัติการและเข้าสู่ระบบ PostgreSQL จะไม่ต้องการการรับรองความถูกต้องเพิ่มเติมและจะให้สิทธิ์การเข้าถึงแก่ผู้ใช้นั้นตามสิทธิพิเศษ (บทบาท) ที่กำหนดให้ในฐานข้อมูล นี่คือการกำหนดค่าเริ่มต้น

หมายเหตุ: ตำแหน่งของpg_hba.confและpg_ident.confขึ้นอยู่กับระบบปฏิบัติการ


4
สำหรับฉันนี่คือคำตอบที่ดีที่สุด เมื่อคุณรู้ว่าตัวเลือกทั้งหมดเหล่านี้คุณสามารถปรับแต่งความเชื่อมั่นได้อย่างง่ายดาย และโดยเฉพาะอย่างยิ่งเมื่อคุณอยู่บนเครื่อง Dev คุณสามารถตั้งค่า 'ident' สำหรับรายการทั้งหมดเพื่อหลีกเลี่ยงการเสียเวลา ขอบคุณ
venkatareddy

1
สิ่งนี้ก็มีประโยชน์สำหรับฉันเช่นกัน ในกรณีของฉันไฟล์ pg_hba.conf ถูกตั้งค่าเป็นเพื่อนฉันเปลี่ยนเป็นรหัสผ่าน โปรดทราบว่าจากการติดตั้งวานิลลาฉันต้องตั้งรหัสผ่านสำหรับผู้ใช้ postgres, sudo su - postgres psql, \ password ตั้งรหัสผ่าน จากนั้นเรียกใช้การเชื่อมต่อเริ่มต้นจาก pdgadmin3 ด้วยชื่อผู้ใช้ postgres และรหัสผ่านที่คุณตั้งไว้
edencorbin

1
และพบไฟล์นั้นอยู่ที่ไหน จริงอยู่ที่คุณอาจต้องทำรายการเนื่องจากดูเหมือนจะไม่มีความสอดคล้องกันระหว่างรุ่น ฉันเดาว่าฉันจะวิ่งหา '/'
JosephK

1
บน Ubuntu-16.04 /etc/postgresql/9.6/main/pg_hba.confมัน
Mike O'Connor

1
ในฐานะที่เป็นคนใหม่สำหรับ psql นี่เป็นความช่วยเหลืออย่างมากและควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากมีวิธีการพิสูจน์ตัวตนที่หลากหลาย
Vyrnach

45

เพียงแค่เพิ่ม-h localhostบิตเป็นของฉันทั้งหมดที่จำเป็นในการทำงาน


เรารู้หรือไม่ว่าเหตุใดจึงแก้ไขได้
Michael Pell

ค่าเริ่มต้นของ postgresql ไม่ได้ถูกตั้งค่าอย่างสมเหตุสมผล พวกเขาอาจจะแก้ไขได้ในตอนนี้ฉันไม่รู้ เห็นได้ชัดว่า URL เริ่มต้นควรเป็นthis_computer = 'http://localhost'
boulder_ruby

15

คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมPGHOST=localhost:

$ psql -U db_user db_name
psql: FATAL:  Peer authentication failed for user "db_user"

$ export PGHOST=localhost
$ psql -U db_user db_name

Password for user mfonline:

15

ในกรณีที่ข้อใดข้อหนึ่งข้างต้นไม่ได้ผลสำหรับคุณ:

ฉันได้ทำการติดตั้ง Postgres ไปแล้วสองสามครั้ง แต่ตอนนี้ติดตั้งระบบ RedHat 6.5 แล้ว (ติดตั้ง Postgres 9.3) การกำหนดค่า hba.conf ทั่วไปของฉันที่ Aron แสดงไว้ด้านบนไม่ทำงาน ปรากฎว่าระบบของฉันใช้ IPV6 และละเว้นการกำหนดค่า IPV4 เพิ่มบรรทัด:

host    all             all             ::1/128                 password

อนุญาตให้ฉันเข้าสู่ระบบสำเร็จ


ขอบคุณอีธาน ฉันกำลังใช้งาน Fedora 20 และฉันต้องเผชิญกับปัญหาเดียวกันกับ OP หลังจากเปลี่ยน IPV4 และ IPV6 เป็นรหัสผ่าน การเชื่อมต่อสำเร็จ
Ibn Saeed

1
คุณยินดีอย่างมาก. หลายครั้งที่ฉันได้รับประโยชน์จากโพสต์อื่นเมื่อพบปัญหาการเขียนโปรแกรมหรือระบบ ดีใจที่ฉันได้คืน
อีธานบราวน์

1
สิ่งนี้ช่วยชีวิตฉันใน Fedora 32!
Rami

12

จากคำตอบทั้งหมดที่กล่าวมาไม่มีสิ่งใดที่ใช้ได้ผลสำหรับฉัน ฉันต้องเปลี่ยนรหัสผ่านผู้ใช้ในฐานข้อมูลด้วยตนเองและมันก็ใช้งานได้ทันที

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

ฉันใช้การตั้งค่าต่อไปนี้:

pg_hba.conf

local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            password  
# IPv6 local connections:
host    all             all             ::1/128                 password

การเชื่อมต่อสำเร็จในที่สุดสำหรับคำสั่งต่อไปนี้:

psql -U produser -d dbname -h localhost -W 

การติดตามสิ่งนี้ช่วยฉันออกไปที่นี่โจเซฟ โดยเฉพาะคำสั่งการเชื่อมต่อในตอนท้ายเพื่อช่วยฉันทดสอบ นอกจากนี้ฉันจะเพิ่มการเริ่มต้นใหม่ของบริการ Postgresql ในกรณีที่ใครสงสัย (แต่ฉันเข้าใจว่ามันบอกเป็นนัย ๆ ) ขอบคุณมาก!
Harlin


10

อืม ...

หากคุณสามารถเชื่อมต่อกับชื่อผู้ใช้และรหัสผ่านใน pgAdminIII แต่คุณไม่สามารถเชื่อมต่อได้ psqlดังนั้นโปรแกรมสองโปรแกรมนั้นอาจเชื่อมต่อกับฐานข้อมูลต่างกัน

[หากคุณกำลังเชื่อมต่อกับฐานข้อมูลอื่นก่อนอื่นให้ลองเชื่อมต่อกับฐานข้อมูลเดียวกัน ดูด้านล่าง]

จากPostgreSQL: เอกสารประกอบ: 9.3: psql :

หากคุณไม่ใช้ชื่อโฮสต์ psql จะเชื่อมต่อผ่านซ็อกเก็ต Unix-domain กับเซิร์ฟเวอร์บนโลคัลโฮสต์หรือผ่าน TCP / IP ไปยัง localhost บนเครื่องที่ไม่มีซ็อกเก็ต Unix-domain

หากคุณไม่ได้ใช้งานสิ่งpsql ... -h host_name ...ใดและคุณกำลังใช้งาน Ubuntu psqlควรเชื่อมต่อผ่านซ็อกเก็ต Unix-domain ดังนั้น PostgreSQL อาจไม่ได้รับการกำหนดค่าให้ใช้วิธีการตรวจสอบรหัสผ่านอย่างใดอย่างหนึ่งสำหรับpostgresผู้ใช้

คุณสามารถทดสอบสิ่งนี้ได้โดยเรียกใช้:

sudo -u postgres psql

หากการทำงานข้างต้นเซิร์ฟเวอร์ของคุณอาจได้รับการกำหนดค่าให้ใช้การรับรองความถูกต้องแบบเพียร์สำหรับการเชื่อมต่อท้องถิ่นโดยผู้ใช้postgresเช่นขอให้ระบบปฏิบัติการชื่อผู้ใช้ของคุณเพื่อยืนยันว่าคุณกำลังpostgres postgres

ดังนั้นมันอาจเป็นไฟล์pg_hba.confของคุณ

เส้นทางที่เต็มรูปแบบของไฟล์จะเป็นสิ่งที่ชอบ /etc/postgresql/9.3/main/pg_hba.conf sudo cat /etc/postgresql/9.3/main/pg_hba.conf | moreคุณสามารถดูได้โดยเช่น

หากคุณไม่ใช้ชื่อโฮสต์ในpsqlคำสั่งคุณควรจะสามารถเชื่อมต่อได้หากคุณเพิ่มรายการต่อไปนี้ในไฟล์pg_hba.confของคุณ:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5

[บรรทัดที่มีความคิดเห็นในไฟล์pg_hba.confเริ่มต้นด้วย#]

หากคุณกำลังรวมทั้งชื่อโฮสต์ของคุณในpsqlคำสั่งเพิ่มรายการนี้แทน:

# Connection type   Database   User       IP addresses   Method
host                all        postgres   127.0.0.1/32   md5

คุณจะต้องใส่รายการก่อนรายการอื่น ๆ psqlที่มีการจับคู่สำหรับการเชื่อมต่อของคุณผ่านทาง หากมีข้อสงสัยเกี่ยวกับสถานที่ที่จะนำมันเพียงแค่ใส่มันก่อนที่บรรทัดแรกที่ไม่มีความคิดเห็น

เพิ่มเติมเกี่ยวกับpg_hba.conf

จากPostgreSQL: เอกสารประกอบ: 9.3: ไฟล์ pg_hba.conf [เหมืองที่เน้นความหนา]:

ระเบียนแรกกับการจับคู่ประเภทการเชื่อมต่อ , ที่อยู่ของลูกค้า , ฐานข้อมูลที่ร้องขอและชื่อผู้ใช้จะใช้ในการดำเนินการตรวจสอบ ไม่มี "fall-through" หรือ "backup": หากเลือกหนึ่งระเบียนและการรับรองความถูกต้องล้มเหลวจะไม่มีการพิจารณาระเบียนที่ตามมา หากไม่มีการบันทึกที่ตรงกันการเข้าถึงจะถูกปฏิเสธ

โปรดทราบว่าบันทึกไม่ตรงกับวิธีการรับรองความถูกต้อง ดังนั้นหากไฟล์pg_hba.confของคุณมีรายการต่อไปนี้:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  peer

จากนั้นคุณจะไม่สามารถเชื่อมต่อผ่าน:

psql -u postgres

หากไม่มีหนึ่งในรายการเหล่านี้อยู่ในไฟล์pg_hba.confของคุณเหนือรายการเดิม:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5
local               all        postgres                  password   # Unencrypted!
local               all        all                       md5
local               all        all                       password   # Unencrypted!

2
มาถึงช่วงท้ายเกม แต่อย่างจริงจังขอบคุณที่พยายามอธิบายสิ่งต่าง ๆ ให้ถูกต้องเพื่อที่ฉันจะได้เข้าใจ!
เจฟฟรีย์ 'jf' Lim

10

ในกรณีของฉันวิธีแก้ปัญหาที่นี่: (สำหรับผู้ที่เกี่ยวข้อง) เข้าสู่ระบบเพื่อ postgres:

sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here

ความนับถือ


7

ปัญหายังคงเป็นไฟล์ pg_hba.conf ของคุณ บรรทัดนี้: คุณสามารถพบไฟล์นี้ใน / etc / postgres / varion / main

local   all             postgres                                peer
Should be

local   all             postgres                                md5

นี่คือคำอธิบายสั้น ๆ ของตัวเลือกทั้งสองตามเอกสาร PostgreSQL อย่างเป็นทางการเกี่ยวกับวิธีการตรวจสอบสิทธิ์

การรับรองความถูกต้องของเพื่อน

วิธีการรับรองความถูกต้องเพียร์ทำงานโดยการรับชื่อผู้ใช้ระบบปฏิบัติการของลูกค้าจากเคอร์เนลและใช้มันเป็นชื่อผู้ใช้ฐานข้อมูลที่ได้รับอนุญาต วิธีนี้รองรับเฉพาะการเชื่อมต่อภายในเครื่องเท่านั้น

การตรวจสอบรหัสผ่าน

วิธีการพิสูจน์ตัวตนแบบใช้รหัสผ่านคือ md5 และรหัสผ่าน วิธีการเหล่านี้ทำงานคล้ายกันยกเว้นวิธีที่รหัสผ่านถูกส่งผ่านการเชื่อมต่อคือ MD5-hashed และ clear-text ตามลำดับ

หากคุณกังวลเกี่ยวกับการโจมตีด้วย "ดมกลิ่น" รหัสผ่านแล้ว md5 เป็นที่ต้องการ ควรหลีกเลี่ยงรหัสผ่านธรรมดาหากเป็นไปได้ อย่างไรก็ตาม md5 ไม่สามารถใช้กับคุณสมบัติ db_user_namespace หากการเชื่อมต่อได้รับการป้องกันด้วยการเข้ารหัส SSL สามารถใช้รหัสผ่านได้อย่างปลอดภัย (แม้ว่าการตรวจสอบความถูกต้องใบรับรอง SSL อาจเป็นตัวเลือกที่ดีกว่าหากการเชื่อมต่อนั้นขึ้นอยู่กับการใช้ SSL)

หลังจากแก้ไขไฟล์นี้อย่าลืมรีสตาร์ทเซิร์ฟเวอร์ PostgreSQL ของคุณ ถ้าคุณอยู่บน Linux นั่นก็คงจะเป็นเช่นนั้นsudo service postgresql restart.


7

สำหรับ fedora26 และ postgres9.6

ขั้นแรกให้ล็อกในฐานะผู้ใช้รูทจากนั้นป้อน psql ด้วยคำสั่งต่อไป

$ su postgres  

แล้วก็

$ psql

ในการpsqlค้นหาตำแหน่งของ hba_file ==> หมายถึงpg_hba.conf

postgres=# show hba_file ; 
 hba_file  
--------------------------------------   
 /etc/postgresql/9.6/main/pg_hba.conf  
(1 row)  

ในpg_hba.confการเปลี่ยนแปลงไฟล์ผู้ใช้สามารถเข้าถึงนี้

host all all 127.0.0.1/32 md5

6

วิธีแก้ปัญหาของฉันใน PostgreSQL 9.3 บน Mac OSX ใน bash shell คือการใช้sudoเพื่อเข้าไปในโฟลเดอร์ data จากนั้นผนวกบรรทัดที่จำเป็นลงในpg_hba.confไฟล์เพื่อให้ผู้ใช้ทุกคนเชื่อถือและสามารถเข้าสู่ระบบได้นี่คือสิ่งที่ฉันทำ :

# in bash_profile edit PGDATA environmental variable
open ~/.bash_profile

# append this line to bash_profile
export PGDATA="/Library/PostgreSQL/9.3/data"

# reload bash_profile
source ~/.bash_profile

# open pg_hba.conf in vim
sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf

# append these two lines to the end of the pg_hba.conf file
local   all   all                  trust
host    all   all   127.0.0.1/32   trust

# can now login as user in bash
psql -d <db_name> -U <user_name> -W

1
นี่เป็นเรื่องปกติสำหรับเซิร์ฟเวอร์การพัฒนา แต่ฉันจะไม่แนะนำสิ่งนี้สำหรับสภาพแวดล้อมการใช้งานจริงเนื่องจากคุณไม่จำเป็นต้องใช้รหัสผ่านเพื่อเชื่อมต่อกับฐานข้อมูลด้วยการตั้งค่าเหล่านี้อีกต่อไป
ไมเคิล


4

ฉันใช้เวลามากขึ้นในการแก้ไขข้อผิดพลาดนี้ซึ่งฉันยินดีที่จะยอมรับ

ลำดับการกำหนดค่าการรับรองความถูกต้องใน pg_hba.conf นั้นเกี่ยวข้องกับกรณีของคุณฉันคิดว่า ไฟล์กำหนดค่าเริ่มต้นมีหลายบรรทัดในการติดตั้งวานิลลา ค่าเริ่มต้นเหล่านี้สามารถตรงกับเงื่อนไขของความพยายามในการรับรองความถูกต้องของคุณทำให้เกิดความล้มเหลวในการตรวจสอบ มันล้มเหลวโดยไม่คำนึงถึงการกำหนดค่าเพิ่มเติมที่เพิ่มในตอนท้ายของไฟล์. conf

ในการตรวจสอบบรรทัดการกำหนดค่าที่ใช้ตรวจสอบให้แน่ใจว่าได้ดูไฟล์บันทึกเริ่มต้นสำหรับข้อความ คุณอาจเห็นบางสิ่งเช่นนี้

LOG:  could not connect to Ident server at address "127.0.0.1", port 113: Connection refused
FATAL:  Ident authentication failed for user "acme" 
DETAIL:  Connection matched pg_hba.conf line 82: "host     all             all             127.0.0.1/32            ident"

ปรากฎว่าบรรทัดเริ่มต้นนี้ทำให้เกิดการปฏิเสธ

host    all             all             127.0.0.1/32            ident

ลองแสดงความคิดเห็น


3

แฮ็คหนึ่งรอบนี้คือการแก้ไข pg_hba.conf

sudo vi /etc/postgresql/9.3/main/pg_hba.conf

เพื่อเป็นการชั่วคราว

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

ณ จุดนี้คุณทำ เพื่อความปลอดภัยแล้วไปและ

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

จากนั้นย้อนกลับและตั้งค่า pg_hba.conf กลับเป็น

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

1

ผมมีปัญหาที่คล้ายกันและฉันคงไว้ในpg_hba.confเมื่อถอดทั้งหมดidentวิธีแม้สำหรับที่อยู่ IP6 (ทั้งๆที่ฉันมีเพียง IP4 บนเครื่อง)

host all all 127.0.0.1/32 password
host all all ::1/128 password
#for pgAdmin running at local network
host all all 192.168.0.0/24 md5

0

ฉันมีผู้ออกเดียวกันหลังจากนี้: การติดตั้ง PostgreSQL สำหรับการพัฒนาทางรถไฟใน Ubuntu 12.04

ฉันลองคำตอบอื่น ๆ แต่สิ่งที่ฉันต้องทำคือ: "config / database.yml"

development:
  adapter: postgresql
  encoding: unicode
  database: (appname)_development
  pool: 5
  username: (username you granted appname database priviledges to)
  password:

0

หากคุณใช้งานบน CentOS คุณอาจต้องโหลด postgres ใหม่หลังจากทำตามขั้นตอนด้านบนแล้ว:

systemctl restart postgresql-9.3.service

ตอนนี้เป็นเพียงpostgresql
Neil Chowdhury

@NeilChowdhury บริการ postgresql ยังคงมีรุ่นในชื่อบริการอย่างน้อยในระบบ Linux เรียกใช้คำสั่งนี้เพื่อดูsystemctl status | grep postgres
Ikrom


0

สำหรับ Windows หากคุณไม่ต้องการแก้ไข pb_gba.conf เช่นปล่อยให้วิธีการ MD5 (ค่าเริ่มต้น) สร้างผู้ใช้ใหม่โดยการเรียกใช้แบบสอบถามนี้ในเครื่องมือ Query ใน PGadmin pgAdmin

CREATE USER admin WITH PASSWORD 'secret'

จากนั้นในcmd

psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432

โดยที่ dbname คือ db ของคุณใน postgresql

ป้อนคำอธิบายรูปภาพที่นี่


-3

สิ่งนี้ใช้ได้กับฉัน: http://tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#

local   all             postgres                                trust
local   all             myapp_usr                               trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 trust

1
สิ่งนี้อนุญาตให้ทุกคนจาก localhost สามารถเข้าสู่ระบบในฐานะผู้ใช้ใด ๆ พฤติกรรมนี้ไม่ได้กล่าวถึงที่ใดก็ได้ในลิงก์ และใช่หน้าข้อมูลเดเบียนมีสิ่งเดียวกัน
rkapl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.