Postgresql: การตรวจสอบรหัสผ่านล้มเหลวสำหรับผู้ใช้“ postgres”


431

ฉันติดตั้ง PostgreSQL 8.4 แล้วไคลเอนต์ Postgres และ Pgadmin 3. การตรวจสอบสิทธิ์ล้มเหลวสำหรับผู้ใช้ "postgres" สำหรับทั้งไคลเอ็นต์คอนโซลและ Pgadmin ฉันพิมพ์ชื่อผู้ใช้ว่า "postgres" และรหัสผ่าน "postgres" เพราะใช้งานได้ก่อนหน้านี้ แต่ตอนนี้รับรองความถูกต้องล้มเหลว ฉันทำก่อนสองครั้งโดยไม่มีปัญหานี้ ฉันควรทำอย่างไรดี? แล้วจะเกิดอะไรขึ้น

psql -U postgres -h localhost -W
Password for user postgres: 
psql: FATAL:  password authentication failed for user "postgres"
FATAL:  password authentication failed for user "postgres"

1
ในกรณีของฉันการเชื่อมต่อล้มเหลวเนื่องจากรหัสผ่านซับซ้อนเกินไป ...
JJD

3
อย่าลืมอ่านจนหมดหน้านี้ ฉันต้องทำหลายสิ่งหลายอย่างเพื่อให้ได้งานนี้ ครั้งแรกที่ALTERขั้นตอนแล้วการแก้ไขของฉันpg_hba.confไฟล์แล้วpostgres รีสตาร์ท
elrobis


ตรวจสอบให้แน่ใจว่าคุณมีอินสแตนซ์ Postgres ไม่เกินสองตัวที่ทำงาน: อันหนึ่งบน Windows หนึ่งอินสแตนซ์ใน Docker นักเทียบท่าไม่ได้รายงานกับฉันว่าพอร์ตถูกใช้ไปแล้ว ดังนั้นเครื่องมือที่เชื่อมต่อกับเครื่อง Windows Postgres ในขณะที่ Poster Docker ทุกอย่างก็ใช้ได้
koppor

คำตอบ:


750

หากฉันจำได้อย่างถูกต้องผู้ใช้postgresจะไม่มีการตั้งค่ารหัสผ่านDBบน Ubuntu เป็นค่าเริ่มต้น ซึ่งหมายความว่าคุณสามารถเข้าสู่บัญชีนั้นโดยใช้บัญชีpostgres ผู้ใช้ระบบปฏิบัติการเท่านั้น

สมมติว่าคุณrootสามารถเข้าถึงกล่องที่คุณสามารถทำได้:

sudo -u postgres psql

หากล้มเหลวโดยมีdatabase "postgres" does not existsข้อผิดพลาดแสดงว่าคุณไม่ได้อยู่ในเซิร์ฟเวอร์ Ubuntu หรือ Debian :-) ในกรณีนี้template1ให้เพิ่มคำสั่ง:

sudo -u postgres psql template1

หากคำสั่งใด ๆ เหล่านี้ล้มเหลวโดยมีข้อผิดพลาดให้psql: FATAL: password authentication failed for user "postgres"ตรวจสอบไฟล์/etc/postgresql/8.4/main/pg_hba.conf: จะต้องมีบรรทัดเช่นนี้เป็นบรรทัดแรกที่ไม่มีความคิดเห็น:

local   all         postgres                          ident

สำหรับ PostgreSQL เวอร์ชันที่ใหม่กว่าidentอาจเป็นpeerไปได้ ไม่เป็นไร

ภายในpsqlเชลล์คุณสามารถให้ผู้ใช้ DB postgresรหัสผ่าน :

ALTER USER postgres PASSWORD 'newPassword';

คุณสามารถออกจาก psqlเปลือกโดยการพิมพ์หรือคำสั่งCtrlD\q

ตอนนี้คุณน่าจะสามารถให้ pgAdmin รหัสผ่านที่ถูกต้องสำหรับ DB superuser และมันก็จะมีความสุขเช่นกัน :-)


ดีกว่านี้ขอบคุณ! psql ทำงานได้ แต่ก็ยังมีปัญหากับ pgadmin3 - มันถามรหัสผ่านสำหรับผู้ใช้รูทระบบของฉัน (แปลกสำหรับฉัน) pg_hba.conf เหมือนที่คุณพูด
I159

ฉันต้องการเพิ่มแล้วออกจากคอนโซลโดยใช้ '\ q' เอาฉันในขณะที่พบว่า :)
hakunin

2
หมายเหตุ pg_hba.conf นั้นจะต้องตั้งค่าผู้ใช้ postgres identเพื่อให้ขั้นตอนแรกทำงานได้ หากคุณตั้งค่าเป็น md5 หรืออย่างอื่นคุณจะไม่สามารถลงชื่อเข้าใช้อัตโนมัติได้
Cerin

80
เป็นคนที่ดีมาก สำหรับผู้ใช้ใหม่รายอื่นอย่าลืมเซมิโคลอนที่ท้ายบรรทัดผู้ใช้ ALTER
itsols

3
@itsols คุณพูดว่า: "เป็นคนที่ดีมากสำหรับผู้ใช้ใหม่คนอื่น ๆ อย่าลืมเซมิโคลอนในตอนท้ายของ ALTER USER line" ... คุณเพิ่งจบการทดสอบสี่ชั่วโมง !! ตอนนี้ฉันรู้สึกโง่และรู้สึกขอบคุณมาก :-D
Frozenjim

148

การตอบสนองของพนักงานนั้นถูกต้อง แต่ถ้าคุณต้องการอัตโนมัติเพิ่มเติมสามารถทำได้:

$ sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"

ทำ! คุณบันทึก User = postgres และ password = postgres

หากคุณไม่มีรหัสผ่านสำหรับ User postgres ubuntu ให้ทำดังนี้

$ sudo passwd postgres


ระวังหากรหัสผ่านของคุณมีอักขระที่น่าสนใจเช่น '!'
Brian Peterson

45

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

ดังนั้นหากคุณทำการเปลี่ยนแปลงดังกล่าวข้างต้น:

local all postgres ident

จากนั้นรีสตาร์ทเป็นรูท (บน Centos มันเป็นเหมือนบริการการบริการ postgresql-9.2 รีสตาร์ท) ตอนนี้คุณควรจะสามารถเข้าถึงฐานข้อมูลเป็นผู้ใช้ postgres

$psql
psql (9.2.4)
Type "help" for help.

postgres=# 

หวังว่านี่จะเป็นการเพิ่มข้อมูลสำหรับผู้ใช้ postgres ใหม่


26
ในประเภทอูบุนตู: sudo service postgresql restart
แอนคิลzer

4
สำหรับการใช้งาน RHEL7sudo systemctl restart postgresql.service
Spechal

1
แล้ว Mac ล่ะ?
AustinT

1
สำหรับ mac ให้ชำระเงินคำถามนี้ใน SO stackoverflow.com/questions/7975556/…
Rohith Nandakumar

ขอบคุณมิเกล ฉันขอรหัสผ่านด้วยตนเองและ pgAdmin ของฉันไม่ได้เชื่อมต่อกับฐานข้อมูลจนกว่าฉันจะรีสตาร์ทเซิร์ฟเวอร์ postgres
Ustin

20

แก้ไขไฟล์ pg_hba.conf เช่นด้วย sudo emacs /etc/postgresql/9.3/main/pg_hba.conf

trustเปลี่ยนวิธีการตรวจสอบทั้งหมดให้กับ เปลี่ยนรหัสผ่าน Unix สำหรับผู้ใช้ "postgres" รีสตาร์ทเซิร์ฟเวอร์ เข้าสู่ระบบด้วยpsql -h localhost -U postgresและใช้รหัสผ่าน Unix ที่เพิ่งตั้งค่า หากใช้งานได้คุณสามารถตั้งค่าไฟล์ pg_hba.conf อีกครั้งเป็นค่าเริ่มต้น


1
หากคุณติดขัดอย่างสมบูรณ์นี่เป็นวิธีการรับประกันเดียวเท่านั้น เปลี่ยนเมธอดทั้งหมดให้ไว้วางใจรีสตาร์ท db จากนั้นเป็นรูท: sudo su - postgres, รหัสผ่าน set / fix / unset ถัดไปสำหรับ postgres db (และในเชลล์หากจำเป็น) จากนั้นกู้คืนเพื่อรักษาความปลอดภัยmd5หรือidentเมธอดและรีสตาร์ทอีกครั้ง อย่างไรก็ตามบน Cent / RedHat 9.4 ไฟล์จะอยู่ที่:/var/lib/pgsql/9.4/data/pg_hba.conf
PapaK

17

สำหรับผู้ที่ใช้งานครั้งแรกและไม่มีข้อมูลเกี่ยวกับรหัสผ่านที่พวกเขาสามารถทำตามขั้นตอนด้านล่าง (สมมติว่าคุณใช้งานบน Ubuntu):

  1. เปิดแฟ้มpg_hba.confใน/etc/postgresql/9.x/main

     sudo vi pg_hba.conf 

    2. แก้ไขบรรทัดด้านล่าง

     local   all             postgres                                peer

    ถึง

     local   all             postgres                                trust
  2. รีสตาร์ทเซิร์ฟเวอร์

      sudo service postgresql restart
  3. ในที่สุดคุณสามารถเข้าสู่ระบบโดยไม่ต้องใช้รหัสผ่านดังแสดงในรูปในที่สุดคุณสามารถเข้าสู่ระบบโดยไม่ต้องใช้รหัสผ่านดังแสดงในรูป

อ้างอิงที่นี่สำหรับข้อมูลเพิ่มเติม


12

หากคุณพยายามล็อกอินเชลล์ postgres ในฐานะผู้ใช้ postgres คุณสามารถใช้คำสั่งต่อไปนี้

เปลี่ยนไปใช้ผู้ใช้ postgres

# su - postgres

เข้าสู่ระบบ psql

# psql

หวังว่าจะช่วย


3
su - postgresขอรหัสผ่านบน posgresql 9.5 บน Ubuntu 16.04
Prashanth Chandra

3
su - postgresเป็นคำสั่งที่แนะนำเอกสารของ fedora อย่างเป็นทางการแต่ฉันได้รับพรอมต์รหัสผ่านด้วย ในการรับรอบที่ฉันทำตามอีเมลฟอรั่ม postgresที่ใช้คำสั่งเดียวกันกับคำตอบที่ยอมรับได้ที่นี่: sudo -u postgres psql. อย่าลืมเริ่มต้นและเริ่มเซิร์ฟเวอร์ฐานข้อมูล
icc97

11

พยายามอย่าใช้พารามิเตอร์ -W และปล่อยให้รหัสผ่านว่างเปล่า บางครั้งผู้ใช้ถูกสร้างโดยไม่มีรหัสผ่าน

หากไม่ได้ผลให้รีเซ็ตรหัสผ่าน มีหลายวิธีที่จะทำ แต่วิธีนี้ใช้ได้กับหลาย ๆ ระบบ:

$ su root
$ su postgres
$ psql -h localhost
> ALTER USER postgres with password 'YourNewPassword';

7

ตามกฎทั่วไป: คุณไม่ควรตั้งรหัสผ่านสำหรับผู้ใช้ POSTGRESคุณควรไม่เคยตั้งเลยทีเดียวรหัสผ่านสำหรับผู้ใช้

หากคุณต้องการสิทธิ์ superuser จาก pgAdmin ให้สร้าง superuser ใหม่ ด้วยวิธีนี้หากข้อมูลประจำตัวของ superuser นั้นถูกบุกรุกคุณสามารถ ssh เข้าสู่โฮสต์ฐานข้อมูลจริงและลบ superuser ด้วยตนเองโดยใช้

sudo -u postgres -c "DROP ROLE superuser;"

1
อะไรคือเหตุผลของกฎง่ายๆนี้?
Gershom

2
เพื่อที่คุณจะได้ไม่ต้องมี superusers ทั้งหมดของคุณ conpromised
ardilgulez

1
การตั้งรหัสผ่านสำหรับ postgres จะทำให้ผู้ใช้ superus ทั้งหมดถูกบุกรุกได้อย่างไร
Gershom

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

7

เมื่อคุณอยู่ในเชลล์ postgres แล้วให้ป้อนคำสั่งนี้

postgres=# \password postgres

หลังจากป้อนคำสั่งนี้คุณจะได้รับแจ้งให้ตั้งรหัสผ่านของคุณเพียงแค่ตั้งรหัสผ่านแล้วลอง


3

เมื่อคุณติดตั้ง postgresql ไม่มีการตั้งรหัสผ่านสำหรับผู้ใช้ postgres คุณจะต้องตั้งค่าบน Unix อย่างชัดเจนโดยใช้คำสั่ง:

sudo passwd postgres

มันจะถามรหัสผ่าน sudo ของคุณแล้วแจ้งรหัสผ่านผู้ใช้ postgres ใหม่ให้คุณ แหล่ง


0

ฉันแค่ต้องการเพิ่มว่าคุณควรตรวจสอบว่ารหัสผ่านของคุณหมดอายุ

ดูการตรวจสอบรหัสผ่าน Postgres ล้มเหลวสำหรับรายละเอียด


1
โปรดเพิ่มรายละเอียดและสรุปว่าลิงก์ใดมีให้ในกรณีที่ไม่มีลิงค์นี้ในอนาคต มิฉะนั้นจะถือว่าถูกตั้งค่าสถานะเป็นลิงก์คุณภาพต่ำ / เท่านั้น
แทนเนอร์

ฉันได้อ่านสิ่งนี้แล้ว: meta.stackexchange.com/questions/8231/…
แทนเนอร์

0

นี่คือชุดค่าผสมบางตัวที่ฉันพยายามลงชื่อเข้าใช้:

# login via user foo
psql -Ufoo -h localhost

sudo -u postgres psql postgres

# user foo login to postgres db
psql -Ufoo -h localhost -d postgres

0

ฉันมีปัญหาที่คล้ายกัน Ubuntu ทิ้งฉันไว้ในคอนโซลด้วยรหัสผ่านสำหรับ superuser ยกเว้นเมื่อฉันเชื่อมต่อกับ -h localhost ในคำสั่ง psql line

ฉันก็สังเกตเห็นเช่นกันว่า "localhost: 8080 / MyJSPSiteLogIn" - แสดงให้เห็น: ข้อผิดพลาดร้ายแรง: autentication กับผู้ใช้ "ผู้ใช้"

pg_hba.conf ก็โอเค

ฉันสังเกตว่ามี postgres สองเวอร์ชันที่ทำงานอยู่ในบริการเดียวกัน

แก้ไขแล้ว - ถอนการติดตั้งเวอร์ชัน inutil


0

ฉันประสบปัญหาคล้ายกัน ขณะเข้าถึงฐานข้อมูลใด ๆ ฉันได้รับพรอมต์ด้านล่างหลังจากอัปเดตรหัสผ่าน "การตรวจสอบรหัสผ่านล้มเหลวสำหรับผู้ใช้" postgres "" ใน PGAdmin


สารละลาย:

  1. ปิดเซิร์ฟเวอร์ postgres
  2. เรียกใช้ pgadmin อีกครั้ง
  3. pgadmin จะถามรหัสผ่าน
  4. โปรดป้อนรหัสผ่านปัจจุบันของผู้ใช้ที่กล่าวถึง

หวังว่ามันจะช่วยแก้ปัญหาของคุณ

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


-1

ฉันหวังว่าสิ่งนี้จะช่วยคุณได้ไม่นาน คุณสามารถเปลี่ยนรหัสผ่านของ postgres sql ได้โดยใช้คำสั่ง bellow

คำสั่ง

sudo -u postgres psql

และต่อไปคุณสามารถปรับปรุงรหัสผ่าน

คำสั่ง

ผู้ใช้เปลี่ยนรหัสผ่าน 'YOUR_NEW_PASSWORD' รหัสผ่านที่ถูกปรับ


1
คำตอบของคุณมีเพียงข้อมูลที่เพิ่มไปแล้ว: stackoverflow.com/a/7696398/8283469
L. Guthardt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.