Postgres ต้องรอด!: วิธีกู้คืนรหัสผ่านผู้ใช้ postgres เมื่อลืมแบบฉุกเฉิน

iconnext - Jun 22 - - Dev Community

เกริ่นนำ

หนึ่งในหน้าที่ของ database adminที่ต้องเผชิญคือการรับมรดกบาปจาก admin คนเก่า, vendor หรือแม้กระทั้งตัวเอง
หัวหน้าฝ่ายการตลาดต้องการสรุป สรุป ข้อมูลการขายของไตรมาสนี้บนระบบ erp ขณะที่เราใช้ pgAdmin หลังจากใช่ username และ password คลิกปุ่ม Login หน้าจอแสดง "username/password is not valid" ว่าแต่ password คืออะไรหว่า ? สิ่งที่ปรกติแล้วในกรณีหาแล้วไม่เจอคือ

  1. โทรหา IT คนเก่าคำตอบคือ จำไม่ได้หรอกลองถาม vendor ดูไหมเผื่อจำได้(ไปข้อ 2.)
  2. โทรถาม vender คำตอบคือผมให้ข้อมูล IT คนเก่าไปหมดแล้ว(ไปข้อ 3)
  3. ลองหาตามไฟล์ หรือสมุดโน้ต(ถ้าจำได้ หรือเจอจะไปข้อ 1 ทำไม)

ดูทรงน่าจะเริ่มติดลูป แหละ reset password user postgres เลยละกันหัวหน้าตามแหละว่าแต่ user ที่ชื่อ postgres เป็นใคร?

ผู้ใช้งาน postres เป็นใคร

postgres เป็นผู้ใช้งานที่เหมือนเป็นนักการเมืองท้องถิ่นที่สามารถบริหารจัดการทุกอย่างของท้องถิ่นที่ชื่อว่า PostgreSQL (ก็เหมือนกับ sa ที่สามารถบริหารจัดการท้องถิ่นที่ชื่อว่า SQL Server นั่นแหละ)
ในตอนติดตั้งระบบฐานข้อมูล PostqreSQL ขึ้นมาจะมีการสร้างผู้ใช้งานชื่อ postgres ข้ึนมาโดยอัติโนมัติเพื่อบริหารจัดการฐานข้อมูลเบื้องต้น
ในบางสถานการณ์ที่เราลืมรหัสผ่านของผู้ใช้งาน postgres ทำให้ไม่สามารถ

  • สร้างฐานข้อมูลใหม่
  • จัดการสิทธิ์ผู้ใช้
  • ปรับแต่งการตั้งค่าระบบ

การ reset password ของผู้ใช้งาน postgres

อย่างแรกไปยังหน้า command line ของระบบปฏิบัติการนั้นจะเดินไปหน้าเครื่องก็ได้จะรีโมทโดย ssh ก็ได้(อย่าใช้ telnet เชียวโดน IT manager ล้อตาย)
โดยในการ reset password จะดำเนินการผ่านไฟล์ pg_hba.conf ซึ่งจะอยู่ที่ตำแหน่ง /var/lib/postgresql/data บน linux หรือ C:\Program Files\PostgreSQL\16\data บน Windows โดยไฟล์ดังกล่าวมีหน้าที่ในการควบคุมการ authentication จาก client ที่เชื่อมต่อเข้ามาโดย hba ย่อมาจาก host base authentication

1.ทำการสำรองไฟล์ pg_hba.conf

# cp pg_hba.conf pg_hba.conf.bak
Enter fullscreen mode Exit fullscreen mode

เกร็ดความรู้: pg_hba.conf ย่อมาจาก "PostgreSQL Host-Based >Authentication Configuration" ไฟล์นี้ควบคุมวิธีการที่ PostgreSQL ตรวจสอบและอนุญาตการเชื่อมต่อจากไคลเอนต์

2.เแก้ไขไฟล์ pg_hba.conf
เปิดไฟล์ด้วย text editor ที่คุณถนัด เช่น nano หรือ vim จากนั้นไปบริเวณท้ายไฟล์ในบรรทัดที่เป็น host all all all scram-sha-256 ให้เปลี่ยนคำว่า scram-sha-256 เป็น trust จากนั้นทำการบันทึกไฟล์
Image description

คำเตือน: การเปลี่ยนเป็น "trust" จะอนุญาตการเชื่อมต่อโดยไม่ต้องใช้รหัสผ่าน ใช้เฉพาะในกรณีฉุกเฉินและอย่าลืมเปลี่ยนกลับ!

3.ทำการ restart service PostgreSQL

# pg_ctl restart
Enter fullscreen mode Exit fullscreen mode

4.ทำการเข้า PostgreSQL อีกครั้งผ่านคำสั่ง

# psql -U postgres
Enter fullscreen mode Exit fullscreen mode

5.จะเข้ามายัง shell ของ PostgreSQL โดยไม่ต้องป้อนรหัสผ่านจากนั้นให้ทำการเปลี่ยนรหัสผ่านผ่านคำสั่ง

postgres=# ALTER USER postgres WITH PASSWORD 'new_password';
Enter fullscreen mode Exit fullscreen mode

เมื่อ new_password เป็นรหัสผ่านใหม่
6.นำค่า pg_hba.conf ที่สำรองไว้แทน pg_hba.conf ที่แก้ค่าไปจากนั้นทำการrestart PostgreSQL service แล้วทดสอบเข้า psql โดยใช้ รหัสผ่านที่ตั้งใหม่

ส่งท้าย

ปัญหาการลืมรหัสผ่านเป็น ปัญหาคลาสสิคของ database admin หวังว่าบทความนี้จะเป็นดั่งยาสามัญประจำบ้าน ช่วยให้เรารอดจากวิกฤติได้

. . . . . . . . . . .
Terabox Video Player