Postgres ต้องรอด!: วิธีกู้คืนรหัสผ่านผู้ใช้ postgres เมื่อลืมแบบฉุกเฉิน
iconnext
Posted on June 22, 2024
เกริ่นนำ
หนึ่งในหน้าที่ของ database adminที่ต้องเผชิญคือการรับมรดกบาปจาก admin คนเก่า, vendor หรือแม้กระทั้งตัวเอง
หัวหน้าฝ่ายการตลาดต้องการสรุป สรุป ข้อมูลการขายของไตรมาสนี้บนระบบ erp ขณะที่เราใช้ pgAdmin หลังจากใช่ username และ password คลิกปุ่ม Login หน้าจอแสดง "username/password is not valid" ว่าแต่ password คืออะไรหว่า ? สิ่งที่ปรกติแล้วในกรณีหาแล้วไม่เจอคือ
- โทรหา IT คนเก่าคำตอบคือ จำไม่ได้หรอกลองถาม vendor ดูไหมเผื่อจำได้(ไปข้อ 2.)
- โทรถาม vender คำตอบคือผมให้ข้อมูล IT คนเก่าไปหมดแล้ว(ไปข้อ 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
เกร็ดความรู้: 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 จากนั้นทำการบันทึกไฟล์
คำเตือน: การเปลี่ยนเป็น "trust" จะอนุญาตการเชื่อมต่อโดยไม่ต้องใช้รหัสผ่าน ใช้เฉพาะในกรณีฉุกเฉินและอย่าลืมเปลี่ยนกลับ!
3.ทำการ restart service PostgreSQL
# pg_ctl restart
4.ทำการเข้า PostgreSQL อีกครั้งผ่านคำสั่ง
# psql -U postgres
5.จะเข้ามายัง shell ของ PostgreSQL โดยไม่ต้องป้อนรหัสผ่านจากนั้นให้ทำการเปลี่ยนรหัสผ่านผ่านคำสั่ง
postgres=# ALTER USER postgres WITH PASSWORD 'new_password';
เมื่อ new_password เป็นรหัสผ่านใหม่
6.นำค่า pg_hba.conf ที่สำรองไว้แทน pg_hba.conf ที่แก้ค่าไปจากนั้นทำการrestart PostgreSQL service แล้วทดสอบเข้า psql โดยใช้ รหัสผ่านที่ตั้งใหม่
ส่งท้าย
ปัญหาการลืมรหัสผ่านเป็น ปัญหาคลาสสิคของ database admin หวังว่าบทความนี้จะเป็นดั่งยาสามัญประจำบ้าน ช่วยให้เรารอดจากวิกฤติได้
Posted on June 22, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024