พอดีเพิ่งติดตั้งโปรแกรม 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