ฉันลืมรหัสผ่านที่ฉันป้อนระหว่างการติดตั้ง postgres


205

ฉันลืมหรือพิมพ์ผิด (ระหว่างการติดตั้ง) รหัสผ่านให้กับผู้ใช้เริ่มต้นของ Postgres ฉันดูเหมือนจะไม่สามารถเรียกใช้และฉันได้รับข้อผิดพลาดต่อไปนี้:

psql: FATAL:  password authentication failed for user "hisham"
hisham-agil: hisham$ psql 

มีอยู่แล้วเพื่อรีเซ็ตรหัสผ่านหรือฉันจะสร้างผู้ใช้ใหม่ด้วยสิทธิ์ superuser ได้อย่างไร

ฉันยังใหม่กับ Postgres และเพิ่งติดตั้งเป็นครั้งแรก ฉันพยายามใช้กับ Rails และฉันใช้ Mac OS X Lion


1
ฉันยังไม่สามารถแสดงความคิดเห็นกับคำตอบได้ดังนั้นจึงต้องทำเช่นนี้ ฉันทำสิ่งที่ SaiyanGirl พูด แต่ฉันยังต้องป้อนรหัสผ่านซึ่งเป็น 'postgres' เพื่อเข้าสู่ระบบจากนั้นฉันสามารถรีเซ็ตรหัสผ่านได้
Pascale

คำตอบ:


359
  1. ค้นหาไฟล์pg_hba.conf- /etc/postgresql-9.1/pg_hba.confมันอาจจะอยู่เช่นใน

    cd /etc/postgresql-9.1/

  2. สำรองข้อมูล

    cp pg_hba.conf pg_hba.conf-backup

  3. วางบรรทัดต่อไปนี้ (เป็นบรรทัดที่ไม่มีเครื่องหมายคอมเมนต์แรกหรือเป็นบรรทัดเดียว):

สำหรับการเกิดขึ้นของทั้งหมดด้านล่าง (ในพื้นที่และโฮสต์) ให้ทำซ้ำส่วน exepct ถ้าคุณไม่จำเป็นต้องทำการเปลี่ยนแปลงใด ๆ ดังต่อไปนี้ไม่ควรมี MD5 หรือ Peer autehication

local  all   all   trust
  1. รีสตาร์ทเซิร์ฟเวอร์ PostgreSQL ของคุณ (เช่นบน Linux :)

    sudo /etc/init.d/postgresql restart

    หาก service (daemon) ไม่เริ่มการรายงานในไฟล์บันทึก:

    การเชื่อมต่อท้องถิ่นไม่ได้รับการสนับสนุนโดยโครงสร้างนี้

    คุณควรเปลี่ยน

    local all all trust

    ถึง

    host all all 127.0.0.1/32 trust

  2. ตอนนี้คุณสามารถเชื่อมต่อเป็นผู้ใช้ใด ๆ เชื่อมต่อเป็น superuser postgres(หมายเหตุชื่อ superuser อาจแตกต่างกันในการติดตั้งของคุณในบางระบบจะมีการเรียกpgsqlตัวอย่างเช่น )

    psql -U postgres

    หรือ

    psql -h 127.0.0.1 -U postgres

    (โปรดทราบว่าด้วยคำสั่งแรกคุณจะไม่ได้เชื่อมต่อกับโฮสต์ท้องถิ่นเสมอไป)

  3. รีเซ็ตรหัสผ่าน ('แทนที่ my_user_name ด้วยpostgresเนื่องจากคุณกำลังรีเซ็ตผู้ใช้postgres )

    ALTER USER my_user_name with password 'my_secure_password';

  4. คืนค่าเก่าpg_hba.confเนื่องจากเป็นอันตรายอย่างมากเพื่อให้รอบ

    cp pg_hba.conf-backup pg_hba.conf

  5. รีสตาร์ทเซิร์ฟเวอร์เพื่อให้ทำงานได้อย่างปลอดภัย pg_hba.conf

    sudo /etc/init.d/postgresql restart

อ่านเพิ่มเติมเกี่ยวกับไฟล์ pg_hba นั้น: http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html


9
จากนั้นเริ่มต้นpsqlอย่างไร ฉันยังคงได้รับพร้อมท์ให้ใส่รหัสผ่านและฉันไม่รู้
CodyBugstein

4
คำตอบนี้ไม่ได้ผลสำหรับฉันหลังจากฉันทำขั้นตอนที่ 3 บริการจะไม่เริ่มฉันไม่ทราบว่าอาจเป็นระบบปฏิบัติการ (W8) แต่ก็ไม่ได้ผล
Scaramouche

3
ทุกคนสำหรับ Windows
Mahesha999

2
โปรดจำลำดับของรายการใน pg_hba.conf เป็นสิ่งสำคัญ หากคุณเพิ่ม "local all all trust" ไว้ท้ายไฟล์มันจะไม่ทำงานอย่างที่คุณคาดไว้เนื่องจากระเบียนก่อนหน้าจะถูกจับคู่ก่อน ดังนั้นใส่ที่ด้านบนของไฟล์เพื่อให้ได้สิ่งที่คุณคาดหวัง
Tagar

6
หากคุณอยู่บนหน้าต่างที่มีข้อผิดพลาดนี้ให้เลื่อนไปที่คำตอบของ @SyanyanGirl เพียงแก้ไขคอลัมน์วิธีการของรายการที่มีอยู่แล้วเป็น 'ความเชื่อถือ' จากนั้นเปลี่ยนกลับเมื่อคุณทำเสร็จแล้ว
sean.hudson

99

เมื่อเชื่อมต่อกับ postgres จากบรรทัดคำสั่งอย่าลืมเพิ่ม -h localhostเป็นพารามิเตอร์บรรทัดคำสั่ง ถ้าไม่ได้ postgres จะพยายามเชื่อมต่อโดยใช้โหมดการตรวจสอบความถูกต้อง PEER

ด้านล่างแสดงการรีเซ็ตรหัสผ่านการเข้าสู่ระบบล้มเหลวด้วยการตรวจสอบความถูกต้อง PEER และการเข้าสู่ระบบสำเร็จโดยใช้การเชื่อมต่อ TCP

# sudo -u postgres psql
could not change directory to "/root"
psql (9.1.11)
Type "help" for help.

postgres=# \password
Enter new password:
Enter it again:
postgres=# \q

ความล้มเหลว:

# psql -U postgres -W
Password for user postgres:
psql: FATAL:  Peer authentication failed for user "postgres"

ทำงานกับ-h localhost:

# psql -U postgres -W  -h localhost
Password for user postgres:
psql (9.1.11)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

postgres=#

7
ขอบคุณสำหรับเคล็ดลับเกี่ยวกับตัวเลือก "-h" ช่วยฉัน
Bunkerbewohner

ไม่ต้องดำเนินการกับ Windows cmd.exe
Fabien Haddadi

1
คำตอบที่ดีที่สุดสำหรับ mac
Muhammad Umar

72

pg_hba.conf( C:\Program Files\PostgreSQL\9.3\data) ไฟล์มีการเปลี่ยนแปลงตั้งแต่คำตอบเหล่านี้ได้รับ สิ่งที่ใช้ได้ผลสำหรับฉันใน Windows คือการเปิดไฟล์และเปลี่ยนMETHODจาก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

จากนั้นใช้ pgAdmin III ฉันลงชื่อเข้าใช้โดยไม่ใช้รหัสผ่านและเปลี่ยนpostgres'รหัสผ่านของผู้ใช้โดยไปที่File -> Change Password


สิ่งนี้ไม่ทำงานเนื่องจาก PgAdmin ยังคงถามรหัสผ่านปัจจุบัน ... ฉันรีเซ็ตเป็น 'trust' และเริ่ม PgAdmin ใหม่ ยังคงไม่สามารถรีเซ็ตได้หากไม่พิมพ์รหัสผ่านปัจจุบัน ...
ยีน b

1
เมื่อคุณเปลี่ยนวิธีการที่trustคุณสามารถทำตามนี้และเปลี่ยนรหัสผ่านในคำสั่ง
Gilad Green

12

เพียงแค่ทราบบน Linux คุณสามารถเรียกใช้sudo su - postgresเพื่อเป็นผู้ใช้ postgres และเปลี่ยนสิ่งที่จำเป็นโดยใช้ psql


3
คุณยังต้องใช้รหัสผ่านหลังจากใช้ psql
Snow

8
  1. แก้ไขไฟล์/etc/postgresql/<version>/main/pg_hba.confและค้นหาบรรทัดต่อไปนี้:

    local   all             postgres                                md5
  2. แก้ไขบรรทัดและเปลี่ยนmd5ที่ส่วนท้ายtrustและบันทึกไฟล์

  3. โหลดบริการpostgresql อีกครั้ง

    $ sudo service postgresql reload
  4. นี่จะโหลดไฟล์การกำหนดค่า ตอนนี้คุณสามารถปรับเปลี่ยนpostgresผู้ใช้โดยเข้าสู่psqlเชลล์

    $ psql -U postgres
  5. อัปเดตpostgresรหัสผ่านของผู้ใช้

    alter user postgres with password 'secure-passwd-here';
  6. แก้ไขไฟล์/etc/postgresql/<version>/main/pg_hba.confและเปลี่ยนtrustกลับเป็นmd5และบันทึกไฟล์

  7. โหลดบริการpostgresql อีกครั้ง

    $ sudo service postgresql reload
  8. ตรวจสอบว่าการเปลี่ยนรหัสผ่านใช้งานได้

    $ psql -U postgres -W

เป็นเรื่องยากไหมที่จะให้โซลูชัน Windows ไม่ใช่ทุกคนที่ใช้ Linux กับ sudo ฉันจะทำบน Windows ได้อย่างไร?
ยีน b

7

ฉันเพิ่งมีปัญหานี้ใน Windows 10 และปัญหาในกรณีของฉันคือฉันเพิ่งทำงาน psqlและเป็นค่าเริ่มต้นในการพยายามลงชื่อเข้าใช้ด้วยชื่อผู้ใช้ Windows ของฉัน ("นาธาน") แต่ไม่มีชื่อ PostgreSQL และมันก็ไม่ได้บอกฉันว่า

ดังนั้นทางออกคือต้องทำงานpsql -U postgresมากกว่าเพียงแค่psqlจากนั้นรหัสผ่านที่ฉันป้อนเมื่อการติดตั้งใช้งานได้


5

การเพิ่มคำตอบสำหรับผู้ใช้ Windows สำหรับรุ่น postgres ล่าสุด (> 10)

ไปที่ตำแหน่งการติดตั้ง postgres ของคุณแล้วค้นหาpg_hba.confคุณจะพบมัน..\postgres\data\pg_hba.conf

เปิดไฟล์นั้นด้วย Notepad ค้นหาบรรทัดนี้

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

ตอนนี้ไปที่ SQL Shell (PSQL) แล้วปล่อยทุกอย่างให้ว่าง

Server [localhost]:
Database [postgres]:
Port [8000]:
Username [postgres]: 

มันจะไม่ถามรหัสผ่านในครั้งนี้และคุณจะเข้าสู่ระบบ

ตอนนี้เรียกใช้บรรทัดนี้ ALTER USER yourusername WITH SUPERUSER

ตอนนี้คุณสามารถออกจากเปลือกด้วย \ q

ไปที่ไฟล์ pg_hba.conf อีกครั้งและเปลี่ยนวิธีการจาก trust เป็น md5 อีกครั้งและบันทึก

ตอนนี้เข้าสู่ระบบด้วยผู้ใช้และรหัสผ่านใหม่ของคุณและคุณสามารถตรวจสอบ \ du สำหรับคุณลักษณะ


1

สำหรับการติดตั้ง Windows ผู้ใช้ Windows จะถูกสร้างขึ้น และ "psql" ใช้ผู้ใช้นี้เพื่อเชื่อมต่อกับพอร์ต หากคุณเปลี่ยนรหัสผ่านของผู้ใช้ PostgreSQL รหัสดังกล่าวจะไม่เปลี่ยน Windows commandline juste ด้านล่างใช้งานได้เฉพาะเมื่อคุณมีสิทธิ์เข้าถึง commandline

คุณสามารถใช้แอปพลิเคชัน Windows GUI แทน "c: \ Windows \ system32 \ lusrmgr.exe" แทน แอพนี้จัดการผู้ใช้ที่สร้างโดย Windows ดังนั้นตอนนี้คุณสามารถแก้ไขรหัสผ่าน


1

สิ่งที่ฉันทำเพื่อแก้ไขปัญหาเดียวกันคือ:

เปิดไฟล์ pg_hba.conf ด้วยเครื่องมือแก้ไข gedit จากเทอร์มินัล:

sudo gedit /etc/postgresql/9.5/main/pg_hba.conf

มันจะขอรหัสผ่าน ป้อนรหัสผ่านล็อกอินของผู้ดูแลระบบของคุณ นี่จะเปิด gedit พร้อมไฟล์ วางบรรทัดต่อไปนี้:

host  all   all  127.0.0.1/32  trust

เพียงด้านล่าง -

# Database administrative login by Unix domain socket

บันทึกและปิด ปิดเทอร์มินัลแล้วเปิดอีกครั้งและรันคำสั่งนี้:

psql -U postgres

ตอนนี้คุณจะเข้าสู่คอนโซล psql ตอนนี้เปลี่ยนรหัสผ่านโดยป้อนสิ่งนี้:

ALTER USER [your prefered user name] with password '[desired password]';

ถ้ามันบอกว่าผู้ใช้ไม่อยู่แล้วแทนที่จะALTERใช้CREATEใช้งาน

สุดท้ายลบบรรทัดที่คุณวางใน pg_hba และบันทึก


0

หากคุณอยู่ในหน้าต่างคุณสามารถเรียกใช้

net user postgres postgres

และเข้าสู่ระบบใน postgres ด้วย postgres / postgres เป็นผู้ใช้ / รหัสผ่าน


0

ไฟล์ .pgpass ในโฮมไดเร็กตอรี่ของผู้ใช้หรือไฟล์ที่อ้างอิงโดย PGPASSFILE สามารถมีรหัสผ่านที่จะใช้หากการเชื่อมต่อนั้นต้องการรหัสผ่าน (และไม่มีการระบุรหัสผ่านเป็นอย่างอื่น) ใน Microsoft Windows ไฟล์ชื่อ% APPDATA% \ postgresql \ pgpass.conf (โดยที่% APPDATA% อ้างถึงไดเรกทอรีย่อยของ Application Data ในโปรไฟล์ผู้ใช้)

ไฟล์นี้ควรมีบรรทัดของรูปแบบต่อไปนี้:

ชื่อโฮสต์: พอร์ต: ฐานข้อมูล: ชื่อผู้ใช้: รหัสผ่าน

(คุณสามารถเพิ่มความคิดเห็นเตือนความจำให้กับไฟล์โดยคัดลอกบรรทัดด้านบนและนำหน้าด้วย #) แต่ละสี่ฟิลด์แรกสามารถเป็นค่าตัวอักษรหรือ * ซึ่งตรงกับสิ่งใดก็ได้ ฟิลด์รหัสผ่านจากบรรทัดแรกที่ตรงกับพารามิเตอร์การเชื่อมต่อปัจจุบันจะถูกใช้ (ดังนั้นให้ใส่รายการที่เฉพาะเจาะจงมากขึ้นเป็นอันดับแรกเมื่อคุณใช้อักขระตัวแทน) หากรายการต้องการให้มี: หรือ \, ให้หลีกเลี่ยงอักขระนี้ด้วย ชื่อโฮสต์ของ localhost ตรงกับทั้ง TCP (ชื่อโฮสต์ localhost) และซ็อกเก็ตโดเมน Unix (pghost ว่างเปล่าหรือไดเรกทอรีซ็อกเก็ตเริ่มต้น) ที่มาจากเครื่องท้องถิ่น ในเซิร์ฟเวอร์สแตนด์บายชื่อฐานข้อมูลของการจำลองแบบตรงกับการเชื่อมต่อการจำลองแบบการสตรีมที่เกิดขึ้นกับเซิร์ฟเวอร์หลัก ฟิลด์ฐานข้อมูลมีประโยชน์ จำกัด เนื่องจากผู้ใช้มีรหัสผ่านเดียวกันสำหรับฐานข้อมูลทั้งหมดในคลัสเตอร์เดียวกัน

บนระบบ Unix สิทธิ์ใน .pgpass จะต้องไม่อนุญาตการเข้าถึงโลกหรือกลุ่ม บรรลุสิ่งนี้โดยคำสั่ง chmod 0600 ~ / .pgpass หากการอนุญาตมีความเข้มงวดน้อยกว่านี้ไฟล์จะถูกละเว้น บน Microsoft Windows จะถือว่าไฟล์นั้นถูกเก็บไว้ในไดเรกทอรีที่ปลอดภัยดังนั้นจึงไม่มีการตรวจสอบสิทธิ์พิเศษ


สิ่งนี้ใช้ได้สำหรับฉันซึ่งเส้นทางขยายเป็น C: \ Users \ <user> \ AppData \ Roaming \ postgresql \ pgpass.conf การปิดและเปิดเซิร์ฟเวอร์ PostgreSQL ก็ช่วยได้เช่นกัน
ข้อมูลภูมิศาสตร์

0

หากคุณใช้ postgresql บน mac os ลองทำสิ่งเหล่านี้ :

  1. แก้ไขไฟล์ pg_hba.conf

  2. sudo vi /Library/PostgreSQL/9.2/data/pg_hba.conf

  3. เปลี่ยนวิธี "md5" สำหรับผู้ใช้ทั้งหมดเป็น "trust" ใกล้กับด้านล่างของไฟล์

  4. ค้นหาชื่อของบริการ

  5. ls / Library / LaunchDaemons

  6. มองหา postgresql

  7. หยุดบริการ postgresql

  8. sudo launchctl stop com.edb.launchd.postgresql-9.2

  9. เริ่มบริการ postgresql

  10. sudo launchctl start com.edb.launchd.postgresql-9.2

  11. เริ่มเซสชัน psql เป็น postgres

  12. psql -U postgres

  13. (ไม่ควรถามรหัสผ่านเนื่องจากการตั้งค่า 'ความน่าเชื่อถือ')

  14. รีเซ็ตรหัสผ่านในเซสชัน psql โดยพิมพ์

  15. ALTER USER postgres ด้วยรหัสผ่าน 'รหัสผ่านที่ปลอดภัย';

  16. \ Q
  17. เข้าสู่

  18. แก้ไขไฟล์ pg_hba.conf

  19. เปลี่ยนกลับเป็น 'md5'

  20. เริ่มบริการใหม่อีกครั้ง


-1

นี่คือสิ่งที่ใช้ได้กับฉันบน windows:

แก้ไขไฟล์ pg_hba.conf หาตำแหน่งที่ C: \ Program Files \ PostgreSQL \ 9.3 \ data

# IPv4 local connections: host all all 127.0.0.1/32 trust

เปลี่ยนเมธอดจาก trust เป็น md5 และรีสตาร์ทเซอร์วิส postgres บน windows

หลังจากนั้นคุณสามารถเข้าสู่ระบบโดยใช้ผู้ใช้ postgres โดยไม่มีรหัสผ่านโดยใช้ pgadmin คุณสามารถเปลี่ยนรหัสผ่านโดยใช้ไฟล์ -> เปลี่ยนรหัสผ่าน

หากผู้ใช้ postgres ไม่มีสิทธิ์ superuser คุณจะไม่สามารถเปลี่ยนรหัสผ่านได้ ในกรณีนี้เข้าสู่ระบบด้วยผู้ใช้รายอื่น (pgsql) ด้วยการเข้าถึง superuser และให้สิทธิพิเศษแก่ผู้ใช้อื่นโดยคลิกขวาที่ผู้ใช้และเลือกคุณสมบัติ -> สิทธิ์ของบทบาท

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