PostgreSQL: การเปลี่ยนรหัสผ่านสำหรับผู้ใช้ไม่ทำงาน


9
  • ฉันติดตั้งPostgreSQLบนEC2เครื่องและตอนนี้ฉันต้องการเปลี่ยนรหัสผ่านของผู้ใช้postgres
  • ฉันทำ
$ sudo -u postgres psql
psql (9.1.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'newpasswd';
ALTER ROLE
  • จากนั้นฉันออกจากเชลล์และลองเข้าสู่ระบบด้วยรหัสผ่านใหม่
$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

PostgreSQLรุ่นของฉันคือ

$ psql --version
psql (PostgreSQL) 9.1.5
contains support for command-line editing

ฉันทำอะไรผิด

ขอบคุณ

อัปเดต ฉันทำการเปลี่ยนแปลง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                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

จากนั้นฉันเริ่มต้นใหม่ postgres

$ sudo /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.1 database server                                                                                                                                               [ OK ] 

ฉันลองลงชื่อเข้าใช้อีกครั้ง แต่ล้มเหลว

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

อาจเป็นรหัสผ่านเก่าที่ถูกเก็บไว้ในไฟล์ ~ / .pgpass ของคุณ

ไม่มีรหัสผ่านที่นั่น ฉันคิดว่าpg_hba.confมีการตั้งค่าในลักษณะที่ไม่ยอมรับการตรวจสอบรหัสผ่าน

@willglynn โปรดตรวจสอบการอัปเดตของฉันมันล้มเหลวอีกครั้งแม้หลังจากทำการเปลี่ยนแปลงในpg_hba.conf
daydreamer

คำตอบ:


9

อย่างที่ willglynn พูดมันอาจเป็นไฟล์ pg_hba.conf ของคุณ

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

local   all    all     peer

จากนั้นเปลี่ยนเป็น:

local   all    all     md5

จากนั้นควรให้คุณเข้าสู่ระบบด้วยรหัสผ่านใหม่ของคุณ (สมมติว่าคุณจัดหาให้ถูกต้อง) :)


สวัสดี @David ฉันพยายามตามที่คุณพูดถึง แต่ก็ยังล้มเหลวโปรดตรวจสอบการอัปเดตของฉันตามที่ฉันทำขอบคุณ
daydreamer

ยังคงมีpeerบรรทัดที่ใช้กับการเชื่อมต่อท้องถิ่น (ซ็อกเก็ตโดเมน UNIX) จากpostgresผู้ใช้ สิ่งนั้นจะล้มเหลวเว้นแต่ว่าปลายสุดจะทำงานในฐานะpostgresผู้ใช้ระบบปฏิบัติการ ดูเอกสารประกอบ pg_hba.confเพื่อความเข้าใจที่ดีขึ้น

แม้ว่าฉันจะสามารถเรียกใช้ได้django manage.py syncdbแต่ฉันจะยังคงอ่านเกี่ยวกับpg_hba.confเอกสารที่คุณกล่าวถึงขอบคุณมากสำหรับความช่วยเหลือของคุณ
daydreamer

ฉันต้องการเพิ่ม-h localhost
Mike

5

ฉันแค่อยากจะเพิ่มสิ่งนั้นนอกเหนือจากการเปลี่ยนpg_hba.confไฟล์จาก

local   all    all     peer

ถึง

local   all    all     md5

ตามคำตอบที่ได้รับการยอมรับวิธีเดียวที่ฉันสามารถเข้าสู่ระบบได้หลังจากทำสิ่งเดียวกันที่ OP กำลังทำคือการส่ง-hแฟล็กเมื่อพยายามล็อกอิน

$ psql -U postgres -h localhost

หวังว่านี่จะช่วยให้ใครบางคนในอนาคต มันทำให้ฉันบ้า!


0

คุณมีสิ่งนี้ ...

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

เปลี่ยนแปลงโดย:

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

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
#local   all             all                                     md5

และเริ่มบริการ postgresql ใหม่อีกครั้งโดย

sudo /etc/init.d/posgresql restart

งานนี้สำหรับฉัน


เมื่อมีการเปลี่ยนแปลงpg_hba.confคุณไม่จำเป็นต้องรีสตาร์ท Postgres การโหลดการกำหนดค่าใหม่ก็เพียงพอแล้ว เช่นpg_ctl ... reloadหรือselect pg_reload_conf()
a_horse_with_no_name

เพียงแค่โหลดใหม่ ... ฉันไม่รู้ ... ขอบคุณ
Israel L Rosas

-1

สำหรับผู้ที่กำลังคลั่งไคล้หลังจากเปลี่ยนรหัสผ่านหลายครั้งและลองทำทุกอย่างที่กล่าวถึงที่นี่อย่าลืมตรวจสอบการหมดอายุของผู้ใช้ คุณสามารถตั้งค่าเป็น 'ไม่หมดอายุ' อย่างนั้นใน psql 9.x:

ALTER ROLE <username> VALID UNTIL 'infinity';

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