ผู้ใช้ PostgreSQL ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์หลังจากเปลี่ยนรหัสผ่าน


10

ฉันได้พบสิ่งนี้กับ 4 บทบาทที่ฉันสร้างขึ้น:
หลังจากเปลี่ยนรหัสผ่านสำหรับผู้ใช้ใน pgAdmin III โดยใช้ GUI (1) ผู้ใช้นั้นไม่สามารถเข้าสู่ระบบได้อีก
pgAdmin III แสดงข้อความข้อผิดพลาด:

An error has occurred:

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

ระบบของฉัน: Postgresql 9.2 บน Ubuntu 12.04

มีวิธีแก้ไขปัญหานี้หรือไม่?

(1): เข้าสู่ระบบด้วย postgres บัญชีผู้ใช้คลิกขวาในบทบาทเข้าสู่ระบบไปที่แท็บ 'ความหมาย' และป้อนรหัสผ่าน

คำตอบ:


15

เป็นไปได้ว่าคุณถูกกัดด้วยPgAdmin bug ( changelog ):

2012-11-28 AV 1.16.1 การควบคุมตัวใช้เลือกวันที่ส่งคืนการประทับเวลาเต็มโดยค่าเริ่มต้นซึ่งอาจทำให้เกิดการเปลี่ยนแปลงวันที่โดยไม่ได้ตั้งใจในงานและวันที่มีผลบังคับใช้ของบทบาท ละเว้นส่วนเวลา

ข้อผิดพลาดนี้ได้รับการเห็นเพื่อตั้งค่าวันหมดอายุของรหัสผ่านในอดีตที่ผ่านมาเช่น 1/1/1970 ในกรณีนี้ข้อความแสดงข้อผิดพลาดเมื่อพยายามเชื่อมต่อไม่แตกต่างจากรหัสผ่านผิด

คุณสามารถตรวจสอบวันหมดอายุเหล่านี้ได้ด้วย:

SELECT usename,valuntil FROM pg_user;

และหากพวกเขาผิดให้รีเซ็ตด้วย:

ALTER USER username VALID UNTIL 'infinity';

และอัปเกรด pgAdmin


ขอบคุณมาก! วิธีนี้แก้ปัญหาได้ ทุกครั้งที่ฉันรีเซ็ตรหัสผ่านผู้ใช้ pgAdmin จะตั้งค่าให้ถูกต้องจนถึงเวลา 01-01-1970 เพื่อให้ผู้ใช้ไม่สามารถเข้าสู่ระบบได้อีก
Cao Minh Tu

คุณได้รับมัน! โรคจิตแช่ง
Carter Cole

ฉันควรจะเข้าสู่ psql อย่างไร นั่นคือบทบาทที่ฉันเพิ่งอัปเดต
ericpeters0n

1
@ ericpeters0n: เปลี่ยนวิธีการรับรองความถูกต้องชั่วคราวเป็นtrustหรือpeerในpg_hba.confไฟล์สำหรับบัญชีนี้
Daniel Vérité

ขอบคุณได้รับมันเรียง สำหรับผู้ที่มาในภายหลัง "ความไว้วางใจ" หมายความว่า: เมื่อคุณเริ่ม postgres ใหม่คุณสามารถเรียกใช้ psql โดยไม่ต้องมีการตรวจสอบรหัสผ่านหากคุณเป็นผู้ใช้ชื่อเดียวกันกับผู้ใช้ที่มีสิทธิ์ (เช่นชื่อผู้ใช้ 'postgres') .. ดังนั้น 'su-postgres psql' จะช่วยให้คุณสามารถเข้าสู่ระบบและแก้ไขรหัสผ่านหรือวันที่ที่ถูกต้อง
ericpeters0n

3

สิ่งที่ต้องทำคือการเข้าสู่ระบบด้วย psql หรือ pgAdmin และ

ALTER USER sam WITH PASSWORD 'new_password';

ตอนนี้ถ้าคุณไม่สามารถเข้าสู่ระบบด้วยบัญชีผู้ใช้ superuser คุณสามารถกู้คืนได้โดยการเปลี่ยนการตั้งค่า pg_hba.conf สำหรับผู้ใช้รายนี้และโหลดการตั้งค่าใหม่ (บางครั้งฉันคิดว่านี่ต้องรีสตาร์ทเซิร์ฟเวอร์ แต่ไม่แน่ใจว่าทำไม)

สิ่งที่คุณสามารถทำได้คือเพิ่มบรรทัดที่อนุญาตให้คุณเข้าสู่ระบบโดยใช้วิธี ident (เพียร์ใน 9.2) (ถ้าคุณสามารถใช้บัญชีระบบโลคอลที่มีชื่อเดียวกันกับผู้ใช้) สำหรับการเชื่อมต่อท้องถิ่นสำหรับผู้ใช้หรือ (ถ้า ที่ไม่สามารถทำได้) ตั้งค่าเป็น "trust" (ชั่วคราวมาก!) หากใช้ความเชื่อถือให้ตั้งค่ากลับโดยเร็วที่สุดเนื่องจากสิ่งนี้หมายความว่า "เชื่อมั่นได้ว่าผู้ใช้เป็นคนที่เขา / เธออ้างว่า!" และด้วยเหตุนี้การตั้งค่านี้จึงเป็นอันตรายหากเปิดใช้งานนอกความต้องการการกู้คืนทันที

เมื่อคุณเข้าสู่ระบบแล้วคุณสามารถรีเซ็ตรหัสผ่านด้านบน


ไม่ควร pgAdmin ดำเนินการเพียงคำสั่งเดียวกันหรือไม่
dezso

(สังเกตว่าฉันพูด psql หรือ pgAdmin ฉันจะทำอะไรให้ชัดเจนขึ้นได้บ้าง)
Chris Travers

ไม่ไม่ฉันแค่คิดว่าการเปลี่ยนรหัสผ่านใน GUI ทำได้เหมือนกัน หากฉันไม่สามารถจินตนาการได้ว่าเกิดอะไรขึ้น
dezso

มีอะไรผิดพลาด? ใส่รหัสผ่านสำหรับการเริ่ม ....
Chris Travers

หนึ่งไม่สามารถตั้งรหัสผ่านอีกครั้งเมื่อเข้าสู่ระบบในฐานะ postgres?
dezso

2

สำหรับตัวแปร Windows - ฉันเคยพบกับข้อผิดพลาดที่น่ารังเกียจเช่นนี้เนื่องจาก pgAdmin สำหรับการติดตั้ง Windows x64 รุ่น 9.2 มันทำให้การผลิตของฉันเป็นอัมพาต

ในโฟลเดอร์C:\Program Files\PostgreSQL\9.2\dataหรือC:\Program Files (x86)\PostgreSQL\9.**x**\dataคุณจะพบไฟล์ข้อความpg_hba.conf

ค้นหาบรรทัดต่อไปนี้:

# 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

และเปลี่ยนวิธีการ md5 เป็น "trust" เช่นนี้:

# 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

จากWindows>Runประเภท "services.msc" และ [Enter] ค้นหาอินสแตนซ์ PostgreSQL ที่ถูกต้องแล้วรีสตาร์ท

การรักษาความปลอดภัยฐานข้อมูลของคุณเปิดกว้างแล้ว! ทำตามคำเตือนเพื่อส่งคืนเป็น md5 หลังจากเปลี่ยนเวลาหมดอายุของรหัสผ่านผู้ใช้ให้เป็นปี 2099 สำหรับผู้ใช้ที่เกี่ยวข้องทั้งหมด


1

หากคุณยังไม่ได้ลองให้ลองตรวจสอบไฟล์ 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

อัพเดท 2016-10-14:

บน Ubuntu /etc/postgresql/9.5/main/pg_hba.confชื่อไฟล์ที่จำเป็นต้องมี สำหรับการทดสอบในท้องถิ่นเท่านั้นให้แก้ไขเพื่อให้มีลักษณะดังนี้:

...
#
# 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

สองบรรทัดที่มี "ความเชื่อถือ" เป็นวิธีการใหม่ พวกเขาอนุญาตให้คุณเชื่อมต่อโดยไม่มีชื่อผู้ใช้ / รหัสผ่าน

เมื่อเสร็จสมบูรณ์คุณจะต้องรีสตาร์ทเซิร์ฟเวอร์ผ่าน:

sudo systemctl restart postgresql 

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

1

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.