ลืมรหัสผ่าน PostgreSQL Windows


31

เช้านี้ฉันพยายามเชื่อมต่อฐานข้อมูล PostgreSQL บนเดสก์ท็อป Windows 7 Professional ของฉัน

ค่าเริ่มต้นคือ 'postgres' แต่แน่นอนว่าฉันลืมรหัสผ่านที่ฉันใช้เมื่อติดตั้งครั้งแรก

ฉัน googled และพบโพสต์ที่เกี่ยวข้องกับการรีเซ็ตรหัสผ่านของคุณ ฉันทำตามขั้นตอนต่าง ๆ แต่ผลลัพธ์ที่ได้นั้นแตกต่างจากที่กล่าวไว้ในโพสต์ ฉันใช้-

net user postgres postgres

เพื่อรีเซ็ตรหัสผ่านสำหรับฐานข้อมูลของฉัน แต่แทนที่จะเป็นข้อความแจ้งความสำเร็จที่ฉันได้รับ:

"ข้อผิดพลาดระบบ 5 เกิดขึ้นการเข้าถึงถูกปฏิเสธ"

ระบบผิดพลาด. ฉันจะหลีกเลี่ยงข้อผิดพลาดนี้และรีเซ็ตรหัสผ่านได้อย่างไร

คำตอบ:


33

(หมายเหตุ: ไม่มากเรื่องนี้มีความเกี่ยวข้องกับผู้อ่านโดยใช้ PostgreSQL 9.2 หรือสูงกว่าจากการติดตั้งกีฬาซึ่งขณะนี้มีความง่ายมากเริ่มต้นติดตั้งใช้NETWORK SERVICEแต่คุณยังสามารถกำหนดค่าบัญชีอื่น ๆ )


ฉันเคยnet user postgres postgres รีเซ็ตรหัสผ่านสำหรับฐานข้อมูลของฉัน แต่แทนที่จะได้รับข้อความแจ้งความสำเร็จ"System error 5 has occurred. Access is denied."

คุณรีเซ็ต (หรือพยายามรีเซ็ต) รหัสผ่านบัญชีบริการ PostgreSQL จะไม่ทำงานเป็นผู้ดูแลระบบเพื่อความปลอดภัยและการติดตั้งโดยทั่วไปชุดมันขึ้นกับ "postgres" บัญชีผู้ใช้ใน PostgreSQL 9.1 และผู้สูงอายุ1 ใน Windows คุณไม่สามารถเริ่มบริการในฐานะผู้ใช้โดยไม่ต้องบันทึกรหัสผ่านของผู้ใช้ในรีจิสทรีดังนั้นนั่นคือสิ่งที่โปรแกรมติดตั้งทำ

หากคุณเปลี่ยนรหัสผ่านสำหรับบัญชีผู้ใช้ Windows postgresบริการ PostgreSQL จะไม่สามารถเริ่มต้นได้อีกต่อไป ดังนั้นอย่าทำเช่นนั้นคุณจะต้องแก้ไขการกำหนดค่าบริการเพื่อจัดเก็บรหัสผ่านที่อัปเดต

โชคดีที่ฉันคิดว่ามีข้อผิดพลาดอีกอย่างที่ทำให้คุณไม่สามารถทำเช่นนั้นได้ ดูเหมือนว่าคุณกำลังเรียกใช้พรอมต์คำสั่งของคุณโดยไม่ใช้ "Run as Administrator" ในบัญชีผู้ใช้ Windows ที่ไม่มีสิทธิ์หรือเครื่องที่ใช้ UAC ดังนั้นจึงไม่ได้ทำงานด้วยสิทธิ์การเข้าถึงที่จำเป็นในการเปลี่ยนรหัสผ่านสำหรับpostgresผู้ใช้

ก่อนที่คุณจะพยายามเปลี่ยนรหัสผ่านตรวจสอบให้แน่ใจว่าเป็นสิ่งที่คุณต้องการทำจริงๆ ปัญหาที่คุณพยายามแก้ไขที่นี่คืออะไร คุณกำลังพยายามติดตั้งการอัพเดทฐานข้อมูลหรืออย่างอื่นที่ขอรหัสผ่านสำหรับpostgresผู้ใช้ Windows หรือไม่?

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

  • ค้นหาของคุณpg_hba.confมักจะมาC:\Program Files\PostgreSQL\9.1\data\pg_hba.conf
  • หากจำเป็นให้ตั้งค่าการอนุญาตเพื่อให้คุณสามารถแก้ไขได้ บัญชีผู้ใช้ของคุณอาจไม่สามารถทำได้จนกว่าคุณจะใช้แท็บความปลอดภัยในกล่องโต้ตอบคุณสมบัติเพื่อให้สิทธิ์กับตัวคุณเองโดยใช้การแทนที่ผู้ดูแลระบบ อีกวิธีหนึ่งค้นหา notepad / notepad ++ ในเมนูเริ่มต้นของคุณคลิกขวาเลือก "Run as administrator" จากนั้นใช้ไฟล์ -> เปิดเพื่อเปิดpg_hba.confวิธีดังกล่าว
  • แก้ไขเพื่อตั้งค่าบรรทัด "โฮสต์" สำหรับผู้ใช้ "postgres" บนโฮสต์ "127.0.0.1/32" เป็น "trust" คุณสามารถเพิ่มบรรทัดได้หากยังไม่มี เพียงแค่แทรก:

    host all postgres 127.0.0.1/32 trust
    host all postgres ::1/128      trust # if IPv6 is in use
    

    ก่อนบรรทัดอื่น ๆ (คุณสามารถละเว้นความคิดเห็นบรรทัดที่ขึ้นต้นด้วย#)

  • เริ่มบริการ PostgreSQL จากแผงควบคุมบริการ (start-> run-> services.msc)

  • เชื่อมต่อโดยใช้ psql หรือ PgAdmin-III หรืออะไรก็ได้ที่คุณต้องการ
  • ALTER USER postgres PASSWORD 'postgres'
  • ลบบรรทัดที่คุณเพิ่มpg_hba.confหรือเปลี่ยนกลับ
  • รีสตาร์ท PostgreSQL อีกครั้ง

ดู: ฉันจะรีเซ็ตรหัสผ่าน postgres สำหรับ PostgreSQL บน Windows ได้อย่างไร


1. 9.2 ตอนนี้ใช้NETWORKSERVICEบัญชีซึ่งไม่ต้องใช้รหัสผ่านเพื่อให้ปัญหานี้จะหายไป


8
คุณอาจจำเป็นต้องมีรายการ ip6 เช่นกัน: "โฮสต์ postgres ทั้งหมด :: ความน่าเชื่อถือ 1/128"
Ted Elliott

ยังทำให้ฉันไม่มีปัญหากับ postreSQL 9.6 ในเครื่อง dev ของฉัน ไม่แน่ใจว่าทำไมผู้คนถึงคิดว่ามันไม่ช่วย> 9.2
tourdownunder

@darwindave ขึ้นอยู่กับการติดตั้งของคุณ หากคุณติดตั้งเพื่อใช้NETWORKSERVICEบัญชีผู้ใช้จะไม่มีรหัสผ่านบัญชี servce หากคุณติดตั้งเพื่อใช้บัญชีบริการเฉพาะเช่นpostgresหรือบัญชีโดเมนก็สามารถช่วยได้
Craig Ringer

คุณช่วยนำคำตอบนี้ให้ทันสมัยด้วย 9.2+ แสดงทั้งสองวิธีสำหรับ Windows ได้หรือไม่?
Evan Carroll

1
@EvanCarroll หากคุณใช้งานNETWORK SERVICEอยู่ไม่มีการรีเซ็ตรหัสผ่าน หากคุณติดตั้งบน 9.2+ โดยใช้บัญชีอื่นข้อมูลเดียวกันจะมีผล และไม่มีการเปลี่ยนแปลงในส่วนที่เกี่ยวกับการรีเซ็ตรหัสผ่านบัญชีฐานข้อมูล superuser postgres ดังนั้นจึงไม่จำเป็นต้องมีการเปลี่ยนแปลงใด ๆ
Craig Ringer

3

คุณต้องแยกความแตกต่างระหว่างผู้ใช้ระบบ (Windows) ชื่อ "postgres" และผู้ใช้ฐานข้อมูลที่มีชื่อเดียวกัน

ค้นหาไฟล์ pg_hba.conf ของคุณซึ่งจะควบคุมการเข้าถึงเซิร์ฟเวอร์ PostgreSQL คุณจะต้องแก้ไขในฐานะผู้ใช้ที่มีสิทธิ์ของผู้ดูแลระบบ ค้นหาบรรทัดที่พูดถึงผู้ใช้ "postgres" และตั้งค่าโหมดชั่วคราวเป็น "trust" รีสตาร์ท postgresql จากนั้นคุณควรจะสามารถเชื่อมต่อได้โดยไม่ต้องใช้รหัสผ่าน รีเซ็ตรหัสผ่านจากนั้นกู้คืนไฟล์กลับเป็นการตั้งค่าดั้งเดิมและรีสตาร์ท PostgreSQL

คู่มือมีรายละเอียดเกี่ยวกับวิธีการรับรองความถูกต้องและไฟล์pg_hba.conf


0

หากใครพบปัญหานี้ในขณะที่ใช้ pgAdmin ฉันขอแนะนำให้คุณดูที่: http://www.homebrewandtechnology.com/blog/graphicallychangepostgresadminpassword


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