เกริ่นนำ
หนึ่งในหน้าที่ของ 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 หวังว่าบทความนี้จะเป็นดั่งยาสามัญประจำบ้าน ช่วยให้เรารอดจากวิกฤติได้
Top comments (0)