Thursday, April 2, 2026

2FA authentication phpMyAdmin

 Conversation with Gemini

You said

สอบถามคับ ผมจะใช้ google authenticator สำหรับการเข้าระบบ phpmyadmin ได้มั้ยคับ


Gemini said

ได้แน่นอนครับ การเพิ่ม Two-Factor Authentication (2FA) ด้วย Google Authenticator ให้กับ phpMyAdmin เป็นวิธีที่ดีมากในการยกระดับความปลอดภัย (โดยเฉพาะถ้าคุณเปิดให้เข้าถึงผ่าน Public IP)


คุณสามารถทำได้ 2 วิธีหลัก ตามสภาพแวดล้อมของระบบครับ:

วิธีที่ 1: ใช้ฟีเจอร์ 2FA ของ phpMyAdmin โดยตรง (แนะนำ)

ตั้งแต่เวอร์ชัน 4.8 เป็นต้นไป phpMyAdmin มีระบบ 2FA มาให้ในตัวแล้วครับ

ขั้นตอนการตั้งค่า:

  • Login เข้า phpMyAdmin ด้วยสิทธิ์ root หรือสิทธิ์สูงสุด
  • ไปที่แถบเมนู Settings (การตั้งค่า) ด้านบน
  • เลือกเมนูย่อย Two-factor authentication (การยืนยันตัวตนแบบสองระดับ)
  • คุณจะเห็นตัวเลือก ให้เลือก "Authentication App (2FA)" (ซึ่งรองรับ Google Authenticator)
  • ระบบจะแสดง QR Code ขึ้นมา ให้ใช้แอป Google Authenticator ในมือถือสแกน
  • กรอกรหัส 6 หลักที่ปรากฏในแอปเพื่อยืนยันการเชื่อมต่อ

ข้อควรระวัง: ระบบจะบังคับให้คุณตั้งค่า phpMyAdmin configuration storage (ฐานข้อมูลชื่อ phpmyadmin) ให้เรียบร้อยก่อน หากยังไม่ได้ตั้งค่า ระบบจะแจ้งเตือนให้สร้างตารางเก็บข้อมูลก่อนครับ

-------------------------------------------------------------------------------------

วิธีที่ 2: ใช้ Google Authenticator ผ่าน Apache/Nginx (ระดับ Server)

วิธีนี้จะไม่ได้ไปยุ่งกับตัว phpMyAdmin แต่เป็นการสร้าง "ประตูกั้น" ก่อนจะถึงหน้า Login ของ phpMyAdmin อีกทีครับ เหมาะสำหรับคนที่ต้องการความปลอดภัยชั้นนอกสุด

สำหรับ Linux (Ubuntu/Debian) ด้วย Apache:

  • ติดตั้ง Module: sudo apt-get install libapache2-mod-authn-otp หรือใช้ Google Authenticator PAM module
  • ตั้งค่าในไฟล์ Config ของ Apache (เช่น /etc/apache2/conf-enabled/phpmyadmin.conf) โดยระบุให้เรียกใช้การตรวจสอบสิทธิ์ผ่าน PAM
  • วิธีนี้จะยุ่งยากกว่าวิธีแรก เพราะต้องคอนฟิกไฟล์ระบบในระดับ Server ครับ


ข้อแนะนำเพิ่มเติมสำหรับคุณ (Jui)

  • เนื่องจากคุณใช้งานทั้ง Docker และ Nginx Reverse Proxy บ่อยครั้ง:
  • หากใช้ Docker: คุณสามารถส่งค่า Environment Variable ใน docker-compose.yml เพื่อเปิดใช้งานฟีเจอร์นี้ได้ง่ายขึ้น หรือตรวจสอบว่า Image ที่ใช้อยู่รองรับการเก็บ Session 2FA ไว้ในฐานข้อมูลหรือไม่ (เพื่อไม่ให้รหัสหายเวลา Restart Container)
  • อย่าลืมจด Backup Codes: เมื่อตั้งค่าเสร็จแล้ว ระบบมักจะมีรหัสสำรองมาให้ เผื่อกรณีมือถือหายหรือแอปมีปัญหา ควรเก็บรหัสนั้นไว้ในที่ปลอดภัยครับ
  • สรุป: วิธีที่ง่ายและเร็วที่สุดคือ วิธีที่ 1 ผ่านหน้าเมนู Settings ใน phpMyAdmin ได้เลยครับ
-----------------------------------------------------------------------------
เลือกทำ วิธีที่ 1

ต้องตั้งค่า phpMyAdmin Configuration Storage ก่อน
ขั้นตอนที่ 1: นำเข้าไฟล์ SQL พื้นฐาน
  • phpMyAdmin เตรียมไฟล์สำหรับสร้างตารางเหล่านี้ไว้ให้แล้วครับ
  • เข้าไปในโฟลเดอร์ที่ติดตั้ง phpMyAdmin (ถ้าเป็นบน Windows/XAMPP จะอยู่ที่ C:\xampp\phpMyAdmin\sql)
  • หาไฟล์ที่ชื่อว่า create_tables.sql
  • เปิด phpMyAdmin ของคุณ -> ไปที่แถบ Import (นำเข้า)
  • เลือกไฟล์ create_tables.sql แล้วกด Go (ลงมือ)
  • หรือไปคัดลอก content ใน phpmyadmin/sql/create_tables.sql แล้วเข้าระบบ phpmyadmin ปกติ เลือกเมนู SQL แล้ววาง statement create table ลง จากนั้น กด Go
  • ตอนนี้คุณจะได้ฐานข้อมูลใหม่ชื่อ phpmyadmin พร้อมตารางต่างๆ (เช่น pma__userconfig, pma__2fa)
ขั้นตอนที่ 2: แก้ไขไฟล์ config.inc.php
  • เพื่อให้ phpMyAdmin รู้จักฐานข้อมูลที่เพิ่งสร้างขึ้น คุณต้องไปเปิดใช้งานในไฟล์คอนฟิกครับ
  • เปิดไฟล์ config.inc.php (อยู่ในโฟลเดอร์หลักของ phpMyAdmin)
  • มองหาบรรทัดที่เกี่ยวกับ "User used to manipulate with storage" และลบเครื่องหมาย // ออก หรือเพิ่มโค้ดนี้ลงไป:
/* User used to manipulate with storage */
$cfg['Servers'][$i]['controlhost'] = 'localhost';
$cfg['Servers'][$i]['controlport'] = '';
$cfg['Servers'][$i]['controluser'] = 'pma'; // หรือ root
$cfg['Servers'][$i]['controlpass'] = 'your_password'

/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
/* บรรทัดสำคัญสำหรับ 2FA */
$cfg['Servers'][$i]['2fa'] = 'pma__2fa';

  • แล้วลองเข้าระบบใหม่ ด้วย user ที่ pma  หรือ user ที่คุณคอนฟิกให้ใช้ 2FA ไว้
เพิ่มเติม
  • user ที่คอนฟิกใช้ 2FA สำหรับเข้า phpmyadmin จะไม่ส่งผลต่อระบบที่ใช้ user นี้ในการเชื่อมต่อฐานข้อมูล
  • ส่วน user อื่นๆ ที่อยากทำ  2FA ก็ให้ login เข้าปกติ แล้วไปตั้งค่า  setting  2fa  ได้เลย ไม่ต้อง config  อะไรเพิ่มแล้ว เพราะมี db phpmyadmin, กับ config.inc.php  เรียบร้อยแล้ว

No comments:

Post a Comment

Popular Posts