แนวทางแก้ไข Postgres 14 Authentication MD5 Password

พอดีเพิ่งติดตั้งโปรแกรม ThaiRefer ใหม่ กับฐานข้อมูล PostgreSQL v.14 แล้วมีปัญหาเรื่องการเชื่อมต่อ ทีไม่ค่อยมีใครเจอ อันเนื่องจาก “รูปแบบการเข้ารหัส” ที่ใช้ต่างจากคนอื่น โดยภาพ error เป็นแบบภาพนี้

วิธีตรวจสอบโดยใช้คำสั่งนี้

SHOW password_encryption;

จะได้ผลลัพท์เป็น scram-sha-256 แต่ถ้าเป็น md5  จะไม่ error วิธีการที่ 1 ก็คือให้เปลี่ยน! (แต่การเข้ารหัสแบบ md5 ก็จะค่อนข้างเปราะบางไปสำหรับยุคสมัยใหม่) หากไม่เปลี่ยน ให้ทำตามวิธีการที่ 2 คือตั้งค่าการเข้าถึง ซึ่งนั่นอาจเป็นคำตอบที่ดีกว่า

วิธีที่ 1 Updating Password in PostgreSQL from md5 to scram-sha-256

สลับรหัสผ่านให้เข้ารหัสแบบ md5

alter system set password_encryption = 'md5';

reload การตั้งค่า

select pg_reload_conf();

ปรับปรุงรหัสผ่านที่ใช้ แก้ชื่อ your_datebase และ your_password ให้ตรงกับที่ใช้งาน

alter role your_database with password 'your_password';

วิธีที่ 2 Allow the connection unconditionally

คือวิธีนี้คือการอนุญาตให้การเชื่อมต่อเข้ามาโดยไม่มีเงื่อนไข ซึ่งถ้าตั้งค่าไม่ดีก็อันตรายพอ ๆ กับ วิธีการที่ 1 แต่เราสามารถกำหนด ได้ว่าจะให้ IP ไหนบ้างที่สามารถเชื่อมต่อเข้ามาได้ โดยการแก้ไขการตั้งค่าของ pg_hba.conf โดยใช้คำสั่ง (ในที่นี้เป็น version 14)

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

กำหนดรูปแบบการเชื่อมต่อใหม่ โดยให้เฉพาะ user ที่สร้างไว้ เช่น test เปลี่ยนค่าจาก auth-method ให้เข้ารหัสโดย md5 หรือ scram-sha-256 เปลี่ยนเป็น trust เพื่อให้สามารถเข้ามาได้ทั้งหมด

trust
Allow the connection unconditionally. This method allows anyone that can connect to the PostgreSQL database server to login as any PostgreSQL user they wish, without the need for a password or any other authentication. See Section 21.4 for details.
# The same using local loopback TCP/IP connections.
#
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             test            0.0.0.0/0               trust

จากนั้น save และ restart postgres และทดสอบเชื่อมต่ออีกครั้ง

สรุป

เบื้องต้นแนะนำให้ทำตามวิธีการที่ 2 ไม่ควรเปลี่ยน authentication method เพราะ scram-sha-256 ค่อนข้างแข็งแกร่งกว่า md5 แต่ในการทำตามวิธีการที่ 2 ก็ควร scope IP ให้กระชับ เช่นการเข้าถึงได้แค่บาง subnet เท่านั้น โดยสามารถอ่านรายละเอียดการตั้งค่าเพิ่มเติมได้จาก document นี้ https://www.postgresql.org/docs/current/auth-pg-hba-conf.html