หากคุณกำลังทำงานกับฐานข้อมูล MySQL คุณน่าจะทราบดีว่าการรักษาความปลอดภัยของฐานข้อมูลนั้นเป็นเรื่องท้าทาย ไม่ว่าจะเป็นการโจมตีแบบ SQL Injection หรือการโจมตีแบบ Brute Force การปกป้องข้อมูลจึงเป็นเรื่องสำคัญโดยเฉพาะเมื่อต้องทำงานกับฐานข้อมูลจากระยะไกล
มีวิธีการกำหนดค่าเซิร์ฟเวอร์ SQL เพื่ออนุญาตการเชื่อมต่อระยะไกล แต่คุณต้องระมัดระวัง เพราะการเปิดการเชื่อมต่อระยะไกลบนเซิร์ฟเวอร์ MySQL อาจทำให้ฐานข้อมูลของคุณกลายเป็นเป้าหมายง่ายสำหรับแฮกเกอร์ หากคุณต้องการอนุญาตการเชื่อมต่อระยะไกลอย่างปลอดภัย นี่คือสิ่งที่คุณควรทราบ
ก่อนเริ่มต้น
ก่อนที่จะทำการเปลี่ยนแปลงใดๆ กับฐานข้อมูล MySQL ของคุณ สิ่งสำคัญที่สุดคือ สำรองข้อมูลฐานข้อมูล (Backup) โดยเฉพาะหากคุณทำงานบนเซิร์ฟเวอร์ที่ใช้งานจริง (Production Server) การเปลี่ยนแปลงใดๆ กับฐานข้อมูลหรือเซิร์ฟเวอร์ที่โฮสต์อาจทำให้เกิดการสูญเสียข้อมูลร้ายแรงหากมีข้อผิดพลาดเกิดขึ้น
คุณอาจพบว่าการเปลี่ยนแปลงการเชื่อมต่อของเซิร์ฟเวอร์อาจทำให้คุณไม่สามารถเข้าถึงได้หลังจากนั้น หากเกิดเหตุการณ์นี้ คุณอาจต้องปรึกษาผู้ดูแลเซิร์ฟเวอร์เพื่อขอความช่วยเหลือเพิ่มเติม วิธีที่ดีคือลองทดสอบการเปลี่ยนแปลงบนเซิร์ฟเวอร์ MySQL ที่รันในเครื่องท้องถิ่น (Local) ก่อน เพื่อตรวจสอบว่าการเปลี่ยนแปลงทำงานได้ถูกต้องหรือไม่ ก่อนจะนำไปใช้กับเซิร์ฟเวอร์ระยะไกล
นอกจากนี้ หากคุณกำลังทำการเปลี่ยนแปลงบนเซิร์ฟเวอร์ระยะไกล คุณจะต้องมีวิธีที่ปลอดภัยในการเชื่อมต่อและทำการเปลี่ยนแปลง SSH (Secure Shell) มักเป็นวิธีที่ดีที่สุด เพราะช่วยให้คุณเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลได้อย่างปลอดภัย คุณยังสามารถใช้ SSH เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ในเครือข่ายท้องถิ่น เช่น เซิร์ฟเวอร์ที่โฮสต์บน Raspberry Pi ได้เช่นกัน
คู่มือนี้จะแนะนำขั้นตอนการกำหนดค่า MySQL เพื่ออนุญาตการเชื่อมต่อระยะไกล แต่คุณต้องแน่ใจก่อนว่ามีการเข้าถึงเซิร์ฟเวอร์ที่โฮสต์ MySQL อยู่ โดยตรงหรือผ่านระยะไกล
สมมติว่าคุณไม่มีการเข้าถึงเซิร์ฟเวอร์ระยะไกลผ่าน SSH (ตัวอย่างเช่น) คุณจะไม่สามารถกำหนดค่าฐานข้อมูล MySQL เพื่ออนุญาตการเชื่อมต่อระยะไกลได้โดยตรง เว้นแต่บัญชี root MySQL ของคุณอนุญาตการเชื่อมต่อระยะไกลอยู่แล้ว ดังนั้น คุณจะต้องสร้างการเชื่อมต่อนี้ก่อนจึงจะสามารถดำเนินการต่อได้
แก้ไขไฟล์การกำหนดค่า MySQL
ขั้นตอนแรกในการกำหนดค่า MySQL เพื่ออนุญาตการเชื่อมต่อระยะไกลคือการแก้ไขไฟล์การกำหนดค่า MySQL ในขั้นตอนนี้ คู่มือนี้สมมติว่าคุณได้เชื่อมต่อกับเซิร์ฟเวอร์ คอมพิวเตอร์ หรือ Mac ที่โฮสต์ฐานข้อมูล MySQL ของคุณจากระยะไกลแล้ว และมีการเข้าถึงคอนโซล
อีกทางหนึ่ง คุณสามารถกำหนดค่าเซิร์ฟเวอร์ MySQL ในเครื่องท้องถิ่นได้โดยใช้เทอร์มินัลเปิดบน Mac หรือ Linux หรือใช้โปรแกรมแก้ไขข้อความบน Windows
- เริ่มต้นด้วยการใช้โปรแกรมแก้ไขข้อความคอนโซลที่คุณชอบเพื่อแก้ไขไฟล์ฐานข้อมูล MySQL บน Linux ให้พิมพ์ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf ลงในเทอร์มินัลหรือหน้าต่าง SSH เพื่อแก้ไขไฟล์นี้โดยใช้โปรแกรมแก้ไข nano (สมมติว่าฐานข้อมูล MySQL อยู่ในตำแหน่งเริ่มต้น)
- หากคุณใช้ Windows ให้เปิด File Explorer และเข้าไปที่โฟลเดอร์ที่ติดตั้ง MySQL (เช่น C:/Program Files/MySQL/MySQL Server 8.0) เปิดไฟล์ my.ini โดยใช้โปรแกรมแก้ไขข้อความเริ่มต้น (เช่น Notepad) โดยดับเบิลคลิกที่ไฟล์ หากไม่มีไฟล์นี้ ให้สร้างไฟล์ใหม่ก่อน
- บน Mac ให้เปิดหน้าต่างเทอร์มินัลและพิมพ์ sudo nano /usr/local/etc/my.cnf นี่คือไฟล์การกำหนดค่าเริ่มต้นสำหรับ MySQL หากคุณติดตั้ง MySQL ผ่าน Homebrew
ตำแหน่งที่อ้างอิงข้างต้นคือตำแหน่งเริ่มต้นสำหรับไฟล์การกำหนดค่า MySQL หากคำสั่งเหล่านี้ไม่ทำงาน คุณจะต้องค้นหาไฟล์ที่เกี่ยวข้อง (my.cnf, mysqld.cnf, หรือ my.ini) ด้วยตนเองเพื่อหาเส้นทางไฟล์ที่ถูกต้อง
การตั้งค่า IP Range สำหรับ Bind-Address อย่างปลอดภัย
- เมื่อคุณเปิดไฟล์การกำหนดค่า MySQL ของเซิร์ฟเวอร์แล้ว ให้ใช้ปุ่มลูกศรบนคีย์บอร์ดเพื่อไปยังส่วน bind-address ของไฟล์ ช่วง IP นี้จำกัดการเชื่อมต่อกับฐานข้อมูลของคุณ ซึ่งโดยปกติจะตั้งค่าให้อนุญาตการเชื่อมต่อจากเครื่องท้องถิ่นหรือเซิร์ฟเวอร์เท่านั้น โดยใช้ 127.0.0.1
- หากคุณต้องการกำหนดค่าฐานข้อมูล MySQL ให้อนุญาตการเชื่อมต่อจากอุปกรณ์ที่ใช้การเชื่อมต่ออินเทอร์เน็ตปัจจุบัน ให้หา Public IP Address ของคุณก่อน แล้วแทนที่ 127.0.0.1 ด้วย IP Address นั้น หรือแทนที่ด้วย IP Address ของอุปกรณ์หรือเซิร์ฟเวอร์ที่คุณต้องการอนุญาตการเชื่อมต่อ
- ในบางกรณี คุณอาจต้องการอนุญาต ทุกการเชื่อมต่อระยะไกล ไปยังฐานข้อมูล MySQL สิ่งนี้มี ความเสี่ยงสูงมาก และไม่ควรใช้บนเซิร์ฟเวอร์ที่ใช้งานจริง หากคุณต้องการอนุญาตเช่นนี้ ให้แทนที่ 127.0.0.1 ด้วย 0.0.0.0
- จดบันทึกค่า port ในส่วน Basic Settings ค่านี้จะจำเป็นในส่วนถัดไป หากไม่มองเห็นได้ ค่าเริ่มต้นจะเป็นพอร์ต 3306 คุณสามารถเพิ่มพอร์ตของคุณเองได้โดยพิมพ์ port = xxxx ในบรรทัดใหม่ แทนที่ xxxx ด้วยค่าพอร์ตที่เหมาะสม
- เมื่อคุณกำหนดค่า bind-address ในไฟล์การกำหนดค่า MySQL เรียบร้อยแล้ว ให้บันทึกไฟล์ หากคุณใช้ Linux ให้กด Ctrl + O และ Ctrl + X บน Mac ให้กด Command + O และ Command + X ผู้ใช้ Windows สามารถบันทึกได้โดยเลือก File > Save
- ต่อไป ผู้ใช้ Linux และ Mac สามารถรีสตาร์ท MySQL ได้โดยพิมพ์ mysql.server stop && mysql.server start หรือ mysql.server restart คุณอาจต้องเพิ่มสิทธิ์ด้วย sudo (เช่น sudo mysql.server restart) และใช้เส้นทางที่เหมาะสมไปยังไฟล์ mysql.server (เช่น /usr/local/bin/mysql.server)
- หากคำสั่งข้างต้นไม่ทำงาน ให้ลอง sudo service mysql restart แทน
- เพื่อรีสตาร์ท MySQL บน Windows ให้เปิดหน้าต่าง PowerShell ใหม่โดยคลิกขวาที่เมนู Start และเลือก Windows PowerShell (Admin) ในหน้าต่าง PowerShell ให้พิมพ์ net stop mysql80 ตามด้วย net start mysql80 แทนที่ mysql80 ด้วยชื่อบริการที่ถูกต้องบนคอมพิวเตอร์ของคุณ
หากคุณไม่แน่ใจเกี่ยวกับชื่อบริการที่ถูกต้องบน Windows ให้พิมพ์ net start เพื่อค้นหา หากคุณไม่สามารถโหลดการกำหนดค่าใหม่ได้ ให้รีสตาร์ทเซิร์ฟเวอร์และโหลด MySQL ใหม่ด้วยตนเอง (หากจำเป็น) แทน
กำหนดค่า Firewall
ในขั้นตอนนี้ ฐานข้อมูล MySQL ของคุณควรอนุญาตการเชื่อมต่อระยะไกลจากอุปกรณ์ที่ใช้ IP Address ที่คุณตั้งค่าเป็นค่า bind-address ในไฟล์การกำหนดค่า MySQL (หรือจากอุปกรณ์ทุกเครื่องหากคุณตั้งค่าเป็น 0.0.0.0) อย่างไรก็ตาม การเชื่อมต่อยังคงถูกบล็อกโดย ไฟร์วอลล์ของอุปกรณ์หรือเครือข่าย
เซิร์ฟเวอร์และคอมพิวเตอร์ส่วนใหญ่ใช้ไฟร์วอลล์เพื่อบล็อกการเชื่อมต่อ เว้นแต่จะได้รับอนุญาตให้เข้าถึงพอร์ตเฉพาะ ขั้นตอนการกำหนดค่าจะแตกต่างกันไป ขึ้นอยู่กับว่าคุณรัน MySQL บน Windows หรือ Linux ไฟร์วอลล์ของ Mac ปิดอยู่โดยค่าเริ่มต้น ดังนั้นคุณไม่ควรต้องทำขั้นตอนเพิ่มเติมที่นี่
กำหนดค่าไฟร์วอลล์ Linux
เซิร์ฟเวอร์ Linux หลายตัวใช้ iptables เป็นยูทิลิตี้ไฟร์วอลล์เริ่มต้น คุณสามารถกำหนดค่าได้โดยทำตามขั้นตอนด้านล่าง
- เปิดเทอร์มินัลหรือการเชื่อมต่อ SSH และพิมพ์ sudo iptables -A INPUT -p tcp -s X.X.X.X –dport YYYY -j ACCEPT แทนที่ X.X.X.X ด้วย IP Address ของอุปกรณ์ที่คุณต้องการอนุญาตให้เชื่อมต่อ MySQL จาก และแทนที่ YYYY ด้วยค่าพอร์ตที่ตรงกันจากไฟล์การกำหนดค่า MySQL (เช่น 3306)
- สิ่งนี้จะกำหนดค่าไฟร์วอลล์ชั่วคราว หากคุณใช้เซิร์ฟเวอร์ Linux ที่พัฒนาจาก Debian หรือ Ubuntu ให้ทำให้การเปลี่ยนแปลงนี้ถาวรโดยพิมพ์ sudo netfilter-persistent save และ sudo netfilter-persistent reload ลงในเทอร์มินัลหรือหน้าต่าง SSH
หาก iptables ไม่ใช่เครื่องมือไฟร์วอลล์เริ่มต้นสำหรับการกระจาย Linux ของคุณ คุณจะต้องอ้างอิงคู่มือผู้ใช้ของการกระจายนั้นเพื่อข้อมูลเพิ่มเติม หากแพ็กเกจบางชนิด (เช่น netfilter-persistent) ไม่พร้อมใช้งาน ให้ใช้เครื่องมือที่จัดเก็บซอฟต์แวร์ของการกระจายเพื่อติดตั้ง (เช่น sudo apt install netfilter-persistent)
กำหนดค่าไฟร์วอลล์ Windows
หากคุณใช้คอมพิวเตอร์หรือเซิร์ฟเวอร์ Windows เพื่อโฮสต์ฐานข้อมูล คุณสามารถกำหนดค่าไฟร์วอลล์ได้โดยทำตามขั้นตอนเหล่านี้:
- คลิกขวาที่เมนู Start และเลือก Run
- ในกล่อง Run ให้พิมพ์ wf.msc และเลือก OK
- ในหน้าต่าง Windows Defender ให้เลือก Inbound Rules > New Rule
- ในหน้าต่าง New Inbound Rule Wizard ให้เลือก Port > Next
- ในเมนูถัดไป ให้เลือก TCP จากตัวเลือก พิมพ์ 3306 (หรือค่าพอร์ตใดก็ตามที่แสดงในไฟล์การกำหนดค่า MySQL ของคุณ) จากนั้นเลือก Next
- ในเมนู Action ให้ปล่อยตัวเลือกเริ่มต้น Allow the connection ไว้ และเลือก Next
- ยืนยันว่าคุณต้องการให้กฎนี้ใช้กับทุกประเภทเครือข่าย จากนั้นเลือก Next
- พิมพ์ชื่อที่อธิบายกฎได้ (เช่น MySQL) ในช่องที่กำหนด จากนั้นเลือก Finish เพื่อเพิ่มลงในรายการกฎไฟร์วอลล์ของคุณ
หากคุณมีปัญหาในการเชื่อมต่อ ให้ทำซ้ำขั้นตอนข้างต้น โดยสร้าง Outbound Rule ใหม่ในการตั้งค่าไฟร์วอลล์โดยใช้รายละเอียดเดียวกัน (พอร์ต 3306 เป็นต้น) คุณอาจต้องกำหนดค่า Router เครือข่ายท้องถิ่นของคุณเพื่อเปิดพอร์ตที่ถูกบล็อก เพื่ออนุญาตการเชื่อมต่อเข้าและออกไปยังฐานข้อมูลของคุณ
เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลโดยใช้ MySQL
หลังจากกำหนดค่าฐานข้อมูล MySQL เพื่ออนุญาตการเชื่อมต่อระยะไกลแล้ว คุณจะต้องสร้างการเชื่อมต่อจริง คุณสามารถทำได้โดยใช้คำสั่ง mysql (mysql.exe บน Windows) จากเทอร์มินัลหรือหน้าต่าง PowerShell
หากคุณใช้ Windows คุณจะต้องตรวจสอบให้แน่ใจว่า MySQL ติดตั้งในเครื่องท้องถิ่นก่อนเริ่มต้น ผู้ใช้ Mac สามารถติดตั้ง MySQL ผ่าน Homebrew จากเทอร์มินัล (brew install mysql) ในขณะที่ผู้ใช้ Linux สามารถใช้ที่เก็บแอปท้องถิ่น (เช่น sudo apt install mysql) เพื่อติดตั้งแพ็กเกจที่จำเป็น
เชื่อมต่อกับ MySQL บน Linux หรือ Mac
- เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ระยะไกลบน Mac หรือ Linux ให้เปิดหน้าต่างเทอร์มินัลใหม่และพิมพ์ mysql -u username -h X.X.X.X:XXXX -p แทนที่ X.X.X.X:XXXX ด้วย IP Address และหมายเลขพอร์ตของเซิร์ฟเวอร์ระยะไกล (เช่น 100.200.100.200:3306) และ username ด้วยชื่อผู้ใช้ MySQL ของคุณ
- เมื่อได้รับแจ้ง ให้ยืนยันรหัสผ่านของคุณ หากการเชื่อมต่อสำเร็จ ข้อความสำเร็จจะปรากฏในเทอร์มินัล
เชื่อมต่อกับ MySQL บน Windows
- เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ระยะไกลบน Windows ให้เปิดหน้าต่าง PowerShell ใหม่โดยคลิกขวาที่เมนู Start และเลือก Windows PowerShell (Admin)
- ในหน้าต่าง PowerShell ใหม่ ให้พิมพ์ cd “C:\Program Files\MySQL\MySQL Workbench 8.0\” เพื่อเข้าสู่โฟลเดอร์ที่ถูกต้อง แทนที่ไดเรกทอรีนี้ด้วยไดเรกทอรีการติดตั้งที่ถูกต้องบนคอมพิวเตอร์ของคุณ ตัวอย่างเช่น หากเวอร์ชัน MySQL ของคุณคือ 8.0.1 ให้ใช้โฟลเดอร์ MySQL Workbench 8.0.1 แทน
- จากนั้นพิมพ์ .\mysql.exe -u username -h X.X.X.X:XXXX -p แทนที่ X.X.X.X:XXXX ด้วย IP Address และหมายเลขพอร์ตของเซิร์ฟเวอร์ระยะไกล (เช่น 100.200.100.200:3306) และ username ด้วยชื่อผู้ใช้ MySQL ที่อนุญาตการเข้าถึงระยะไกล (เช่น root) ปฏิบัติตามคำแนะนำเพิ่มเติมบนหน้าจอ (หากมี)
- ระบุรหัสผ่านเมื่อได้รับแจ้ง เพื่อทำให้กระบวนการลงชื่อเข้าใช้เสร็จสมบูรณ์และเข้าถึงฐานข้อมูล MySQL ของคุณจากระยะไกล
หากวิธีนี้ไม่ได้ผล ให้เชื่อมต่อกับเซิร์ฟเวอร์หรือคอมพิวเตอร์ที่โฮสต์เซิร์ฟเวอร์ MySQL โดยใช้ SSH (หรือเข้าถึงโดยตรง) โดยใช้ขั้นตอนเหล่านี้และใช้ Аргумент -h localhost คุณสามารถสร้างบัญชีผู้ใช้ที่เหมาะสมได้โดยทำตามขั้นตอนด้านล่าง
อนุญาตการเข้าถึงผู้ใช้ระยะไกลไปยังฐานข้อมูล MySQL
ในจุดนี้ คุณควรสามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ของคุณจากระยะไกลโดยใช้บัญชีผู้ใช้ root ของเซิร์ฟเวอร์ หรือบัญชีผู้ใช้อื่นที่มีสิทธิ์สูงขึ้น เนื่องจากระดับการเข้าถึงนี้ไม่ปลอดภัย คุณอาจต้องการสร้างบัญชีที่มีข้อจำกัดมากกว่าสำหรับการเข้าถึงฐานข้อมูล MySQL ของคุณ
บัญชีนี้จะมีการเข้าถึงที่จำกัดต่อเซิร์ฟเวอร์ MySQL ของคุณ อนุญาตให้โต้ตอบกับฐานข้อมูลที่เลือกเท่านั้น จะไม่สามารถทำการเปลี่ยนแปลงที่ร้ายแรงกว่านี้ได้ เช่น การเข้าถึงข้อมูลฐานข้อมูลอื่น สร้างบัญชีผู้ใช้ใหม่ ฯลฯ
คุณจะต้องมีความสามารถในการลงชื่อเข้าใช้เซิร์ฟเวอร์ MySQL ของคุณจากระยะไกล หากคุณไม่สามารถใช้บัญชี root จากระยะไกลได้ คุณจะต้องเข้าถึง Shell ของเซิร์ฟเวอร์โดยใช้คำสั่ง mysql ผ่านการเชื่อมต่อ SSH ระยะไกล หรือโดยการเข้าถึงคอมพิวเตอร์หรือเซิร์ฟเวอร์ที่โฮสต์เซิร์ฟเวอร์โดยตรง
- ใน Shell MySQL ระยะไกลของคุณ (โดยใช้เครื่องมือ mysql) ให้พิมพ์ CREATE USER "username"@"x.x.x.x" IDENTIFIED BY "password"; และกด Enter แทนที่ username ด้วยชื่อผู้ใช้ที่คุณต้องการสร้าง x.x.x.x ด้วย IP Address ที่คุณต้องการเชื่อมต่อจาก และ password ด้วยรหัสผ่านที่เหมาะสม
- คุณจะต้องให้สิทธิ์ที่จำเป็นแก่บัญชีใหม่ของคุณ ในการทำเช่นนี้ ให้พิมพ์ GRANT ALL ON databasename.* TO username@"x.x.x.x"; และแทนที่ databasename, username, และ x.x.x.x ด้วยรายละเอียดที่ถูกต้อง หากคุณต้องการ ให้แทนที่ databasename ด้วย * เพื่อให้สิทธิ์เข้าถึงฐานข้อมูลทั้งหมด
เมื่อให้สิทธิ์แล้ว ให้ใช้ขั้นตอนในส่วนข้างต้นเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ของคุณจากระยะไกลโดยใช้บัญชีใหม่ (เช่น mysql -u username -h X.X.X.X:XXXX -p)
รักษาความปลอดภัยข้อมูลฐานข้อมูลของคุณ
ไม่ว่าคุณจะทำงานกับ MySQL หรือฐานข้อมูล SQL ประเภทอื่น การรักษาความปลอดภัยของการเชื่อมต่อเป็นสิ่งสำคัญเพื่อรักษาความปลอดภัยของข้อมูล วิธีที่ดีคือการสร้าง SSH Keys สำหรับการเข้าถึงเซิร์ฟเวอร์ระยะไกล แทนที่จะพึ่งพารหัสผ่านเก่าแก่ (และเดาได้ง่าย)
หากคุณกังวลเกี่ยวกับการสูญเสียข้อมูล คุณสามารถสำรองฐานข้อมูลของคุณออนไลน์ได้อย่างง่ายดาย ฐานข้อมูลส่วนใหญ่รันบนเซิร์ฟเวอร์ Linux — คุณสามารถทำให้การสำรองไฟล์ Linux เป็นอัตโนมัติได้อย่างง่ายดาย หากคุณรัน MySQL บน Windows คุณสามารถตั้งค่าระบบสำรองข้อมูลอัตโนมัติที่คล้ายกันสำหรับ Windows ได้ เพื่อให้คุณสามารถกู้คืนข้อมูลในสถานการณ์ฉุกเฉิน