วิธีแก้ปัญหาในกรณีที่ลืมรหัสเข้าใช้งาน PostgreSQL ที่ติดตั้งใน Amazon Linux 2

กรณีที่เราลืมรหัสเข้าใช้งาน PostgreSQL ที่ติดตั้งใน Amazon Linux 2 ก็จะไม่สามารถ Login เข้าไปจัดการ Database ได้ แต่ไม่ต้องกังวลไปครับ เนื่องจากเราสามารถรีเซ็ตรหัสผ่านและสร้างขึ้นมาใหม่ได้ด้วยการ Run Command ผมจะมาอธิบายในบทความนี้ครับ

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

POP จากบริษัท Classmethod (Thailand) ครับ

ครั้งนี้ผมจะมาแนะนำวิธีแก้ปัญหาในกรณีที่ลืมรหัสเข้าใช้งาน PostgreSQL ที่ติดตั้งใน Amazon Linux 2

ปัญหา

ในขณะที่เรากำลังใช้งาน PostgreSQL แล้วลืมรหัสเข้าใช้งาน ก็จะทำให้ไม่สามารถเข้าไปยัง PostgreSQL เพื่อจัดการข้อมูลต่างๆในนั้นได้ ซึ่งจะเหมือนกับปัญหาด้านล่างนี้

Login เข้าใช้งาน PostgreSQL

psql -h localhost -U postgres

Output (example)
เมื่อใส่รหัสผิดก็จะแสดงข้อความแบบนี้

TERMINAL (PuTTY)

[ec2-user@ip-172-31-29-138 ~]$ psql -h localhost -U postgres
Password for user postgres:
psql: FATAL:  password authentication failed for user "postgres"
[ec2-user@ip-172-31-29-138 ~]$

วิธีแก้ปัญหา

เข้าใช้งาน root

ก่อนอื่นเราต้องเข้าใช้งานสิทธิ์ root

sudo su -


Reset Password

เข้าไปตั้งค่าที่ไฟล์ pg_hba.conf

vi /var/lib/pgsql/data/pg_hba.conf

Output (example)
เปลี่ยน METHOD ของ local ให้เป็น trust เหมือนกับตัวอย่างด้านล่างนี้

TERMINAL (PuTTY)

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust


Restart PostgreSQL

systemctl restart postgresql


ทดสอบ Login postgres โดยไม่ใช้รหัสผ่าน

เมื่อ Restart แล้ว ก็จะเป็น user postgres ที่สามารถเข้าใช้งานได้โดยไม่ต้องใช้รหัสผ่าน

su - postgres

Output (example)

TERMINAL (PuTTY)

[root@ip-172-31-29-138 ~]# su - postgres
Last login: Mon Sep  5 07:45:01 UTC 2022 on pts/0
-bash-4.2$


พิมพ์ psql ลงไป (เราจะไม่ Login ผ่าน -h)

psql

Output (example)
จะเห็นว่าเราสามารถเข้าใช้งานได้โดยไม่ต้องใช้รหัสผ่าน

TERMINAL (PuTTY)

-bash-4.2$ psql
psql (10.17)
Type "help" for help.

postgres=#


เปลี่ยน Password

เปลี่ยนรหัสผ่านใหม่ (เปลี่ยน********ให้เป็นรหัสของคุณ)
・postgres = Username
・password = รหัสผ่านใหม่ของเรา

alter role postgres with password '********';

Output (example)
Password:P@ssW0rd2นี้เป็นแค่ตัวอย่าง

TERMINAL (PuTTY)

postgres=# alter role postgres with password 'P@ssW0rd2';
ALTER ROLE
postgres=#


ออกจาก psql

\q

Output (example)

TERMINAL (PuTTY)

postgres=# \q
-bash-4.2$


กลับมาที่ root

exit

Output (example)

TERMINAL (PuTTY)

-bash-4.2$ exit
logout
[root@ip-172-31-29-138 ~]#


เข้าไปตั้งค่าที่ไฟล์ pg_hba.conf อีกครั้ง

vi /var/lib/pgsql/data/pg_hba.conf

Output (example)
เปลี่ยน METHOD ของ local ให้เป็น md5 เหมือนกับตัวอย่างด้านล่างนี้

TERMINAL (PuTTY)

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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


Restart PostgreSQL

systemctl restart postgresql


เมื่อ Restart แล้ว ก็จะเป็น user postgresql ที่ต้องใช้รหัสผ่าน Login เพื่อเข้าใช้งาน

su - postgres

Output (example)

TERMINAL (PuTTY)

[root@ip-172-31-29-138 ~]# su - postgres
Last login: Tue Sep  6 04:57:46 UTC 2022 on pts/0
-bash-4.2$


ทดสอบ Login postgresql โดยใช้รหัสผ่าน

ตรวจสอบให้แน่ใจว่าเราสามารถ Login ด้วยรหัสผ่านได้โดยใช้ psql

psql

Output (example)
ใส่รหัสผ่านใหม่ที่สร้างเมื่อสักครู่นี้ของเรา

TERMINAL (PuTTY)

-bash-4.2$ psql
Password:

Output (example)
ก็จะสามารถ Login เข้าใช้งานด้วยรหัสผ่านใหม่ได้แล้ว

TERMINAL (PuTTY)

Password:
psql (10.17)
Type "help" for help.

postgres=#


ทีนี้ให้ออกจาก postgresql กลับมาที่ root โดยรันคำสั่งนี้

\q
exit


ทดสอบ Login postgresql ผ่าน -h โดยใช้รหัสผ่าน

ผมจะทดสอบ Login postgresql ผ่าน -h อีกครั้ง

psql -h localhost -U postgres

Output (example)
จะเห็นว่าผมสามารถเปลี่ยนรหัสผ่านและ Login ผ่าน -h โดยใช้รหัสผ่านใหม่ได้แล้ว

TERMINAL (PuTTY)

[root@ip-172-31-29-138 ~]# psql -h localhost -U postgres
Password for user postgres:
psql (10.17)
Type "help" for help.

postgres=#

สรุป

ในขณะที่เราใช้งาน PostgreSQL อยู่นั้น บางครั้งเราอาจลืมรหัสผ่านได้ ดังนั้นผมจึงใช้โอกาสนี้มาแนะนำวิธีการเปลี่ยนรหัสผ่านให้กับผู้อ่านที่เกิดเหตุการณ์แบบนี้ครับ

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP จากบริษัท Classmethod (Thailand) ครับ !

Link อ้างอิง