โพสต์ข้อความแสดงข้อผิดพลาด: FATAL: การพิสูจน์ตัวตนล้มเหลวสำหรับผู้ใช้“ …”


คำตอบ:


36

หมายความว่า Postgres พยายามตรวจสอบสิทธิ์ผู้ใช้โดยใช้โปรโตคอล Identity และไม่สามารถทำได้ Ident auth ทำงานเช่นนี้:

  • คุณมีบทบาทฐานข้อมูล 'foo' ในฐานข้อมูล 'db'
  • pg_hba.confไฟล์ของคุณ(ใน/etc/postgres-something/main) กำหนด 'Ident' เป็นโปรโตคอลในการเชื่อมต่อกับฐานข้อมูลdbสำหรับผู้ใช้ที่เชื่อมต่อจากโฮสต์ที่แน่นอน
  • ชื่อผู้ใช้ unix ที่ทำการเชื่อมต่อคือ 'foo'
  • เซิร์ฟเวอร์ Ident ทำงานบนเครื่องที่ผู้ใช้กำลังเชื่อมต่อจากยืนยันว่าชื่อผู้ใช้ของพวกเขาคือ 'foo'

สาเหตุและวิธีแก้ไขที่เป็นไปได้:

  1. นอกจากนี้ไม่มีเซิร์ฟเวอร์ Identที่ทำงานบนเครื่องที่คุณกำลังพยายามที่จะเชื่อมต่อจาก ทดสอบสิ่งนี้โดยพยายามเชื่อมต่อกับพอร์ต 113 หากล้มเหลวให้ติดตั้งเซิร์ฟเวอร์ Ident (เช่นsudo apt-get install oidentd)
  2. มีเซิร์ฟเวอร์ Ident แต่ไม่มีบทบาทฐานข้อมูลที่ตรงกับชื่อที่คุณพยายามเชื่อมต่อด้วย ('foo' ในตัวอย่างด้านบน) ดังนั้นสร้างมันขึ้นมาโดยการเชื่อมต่อกับฐานข้อมูลใดที่มีสิทธิ superuser CREATE ROLE fooและทำ /etc/postgresql/.../main/pg_ident.confอีกวิธีหนึ่งคือเพิ่มรายการไปยัง
  3. ชื่อผู้ใช้ของเชลล์อาจไม่ตรงกับบทบาทฐานข้อมูล คุณอาจทดสอบสิ่งนี้ได้โดยเชื่อมต่อกับเซิร์ฟเวอร์ Identity ในขณะที่การเชื่อมต่อเกิดขึ้นและส่งผ่านหมายเลขพอร์ตที่ถูกต้อง
  4. บางทีคุณอาจต้องการเชื่อมต่อด้วยรหัสผ่านไม่ใช่รหัสประจำตัว แก้ไขpg_hba.confไฟล์อย่างเหมาะสม ตัวอย่างเช่นการเปลี่ยนแปลง:

    host all all 127.0.0.1/32 ident
    

    ไปยัง

    host all all 127.0.0.1/32 md5
    

2
สำหรับ fedora ไฟล์นั้นอยู่ใน/var/lib/psql/data
Anwar

ฉันไม่คิดว่าใครจะสนใจตอบว่าทำไม postgres ใช้ 'ident' เป็นข้อมูลเข้าสู่ระบบเริ่มต้น
icc97

เพราะนั่นทำให้รู้สึกเมื่อ 20 ปีก่อนและไม่มีอะไรเปลี่ยนแปลงใน * ระวัง? :)
Steve Bennett

@ icc97 ไม่มีอะไรในคำตอบนี้บ่งชี้ว่า "ident" คือการเข้าสู่ระบบเริ่มต้นสำหรับ Postgres; คุณได้ความคิดนั้นอยู่ที่ไหน เท่าที่ฉันทราบชื่อบทบาท superuser เริ่มต้นในคลัสเตอร์ Postgres คือ "postgres"
Wildcard

9

ไม่แน่ใจเกี่ยวกับสาเหตุ แต่สิ่งนี้แก้ไขได้สำหรับฉัน:

ใน pg_hba.conf

เปลี่ยนเป็น:

โฮสต์ทั้งหมด 127.0.0.1/32 md5

ข้อผิดพลาดที่แน่นอน: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"


1
การเปลี่ยน "ident" -> "md5" ทำเพื่อฉัน
webwesen

3

บน CentOS ให้เพิ่มบรรทัดต่อไปนี้ลงใน/var/lib/pgsql/9.3/data/pg_hba.conf:

host all all 127.0.0.1/32 trust

และคอมเม้นท์รายการอื่น ๆ

แน่นอนการตั้งค่านี้ไม่ปลอดภัย แต่ถ้าคุณแค่ยุ่งเกี่ยวกับการพัฒนา VM อย่างฉันก็อาจจะดี ...


0

หากคุณยังไม่ได้ลองให้ลองตรวจสอบไฟล์ pg_hba.conf ของคุณ มันจะมีชื่อบางอย่างเช่น /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20) คุณอาจต้องใช้ 'find / -name pg_hba.conf' เพื่อค้นหา

ที่ด้านล่างของไฟล์ให้เปลี่ยนค่า 'วิธี' เป็น 'ความไว้วางใจ' สำหรับการทดสอบในท้องถิ่น (ดู postgres docs สำหรับข้อมูลทั้งหมด) รีบูทเครื่องเพื่อให้แน่ใจว่าทุกอย่างเริ่มสะอาดและมีการอ่านพารามิเตอร์ใหม่

หวังว่านี่จะช่วยรักษาความเศร้าโศกของคุณได้ มันแก้ไขปัญหาของฉันใน Fedora 20 ด้วย PostgreSQL 9.3


ไม่จำเป็นต้องรีบูตเครื่องทั้งหมดของคุณเมื่อแก้ไขการกำหนดค่า PostgreSQL ให้ลองใช้pg_ctl reloadจากคอนโซลหรือSELECT pg_reload_conf();เมื่อเรียกใช้งาน SQL ในฐานะผู้ใช้ที่มีสิทธิ์
benjwadams
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.