Android

วิธีอนุญาตการเชื่อมต่อระยะไกลไปยังเซิร์ฟเวอร์ฐานข้อมูล mysql

เวก้าผับ ฉบับพิเศษ

เวก้าผับ ฉบับพิเศษ

สารบัญ:

Anonim

โดยค่าเริ่มต้นเซิร์ฟเวอร์ MySQL จะรับฟังการเชื่อมต่อจาก localhost เท่านั้นซึ่งหมายความว่าสามารถเข้าถึงได้โดยแอปพลิเคชันที่ทำงานบนโฮสต์เดียวกันเท่านั้น

อย่างไรก็ตามในบางสถานการณ์จำเป็นต้องเข้าถึงเซิร์ฟเวอร์ MySQL จากระยะไกล ตัวอย่างเช่นเมื่อคุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ระยะไกลจากระบบโลคัลของคุณหรือเมื่อใช้การปรับใช้เซิร์ฟเวอร์หลายตัวที่แอปพลิเคชันทำงานบนเครื่องอื่นจากเซิร์ฟเวอร์ฐานข้อมูล ทางเลือกหนึ่งคือเข้าถึงเซิร์ฟเวอร์ MySQL ผ่าน SSH Tunnel และอีกทางหนึ่งคือกำหนดค่าเซิร์ฟเวอร์ MySQL ให้ยอมรับการเชื่อมต่อระยะไกล

ในคู่มือนี้เราจะทำตามขั้นตอนที่จำเป็นเพื่ออนุญาตการเชื่อมต่อระยะไกลไปยังเซิร์ฟเวอร์ MySQL ใช้คำแนะนำเดียวกันกับ MariaDB

การกำหนดค่าเซิร์ฟเวอร์ MySQL

ขั้นตอนแรกคือการตั้งค่าเซิร์ฟเวอร์ MySQL ให้ฟังที่อยู่ IP เฉพาะหรือที่อยู่ IP ทั้งหมดในเครื่อง

หากเซิร์ฟเวอร์ MySQL และไคลเอนต์สามารถสื่อสารกันผ่านเครือข่ายส่วนตัวได้ตัวเลือกที่ดีที่สุดคือการตั้งค่าเซิร์ฟเวอร์ MySQL ให้ฟังเฉพาะบน IP ส่วนตัว มิฉะนั้นหากคุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์ผ่านเครือข่ายสาธารณะให้ตั้งค่าเซิร์ฟเวอร์ MySQL ให้ฟังที่อยู่ IP ทั้งหมดในเครื่อง

ในการทำเช่นนั้นคุณจะต้องแก้ไขไฟล์กำหนดค่า MySQL และเพิ่มหรือเปลี่ยนค่าของตัวเลือก bind-address คุณสามารถตั้งค่าที่อยู่ IP เดียวและช่วง IP ได้ หากที่อยู่คือ 0.0.0.0 เซิร์ฟเวอร์ MySQL ยอมรับการเชื่อมต่อกับโฮสต์ IPv4 อินเตอร์เฟสทั้งหมด หากคุณมี IPv6 ที่กำหนดค่าไว้ในระบบของคุณดังนั้นแทนที่จะเป็น 0.0.0.0 ให้ใช้ ::

ตำแหน่งของไฟล์คอนฟิกูเรชัน MySQL จะแตกต่างกันไปตามการกระจาย ใน Ubuntu และ Debian ไฟล์นั้นอยู่ที่ /etc/mysql/mysql.conf.d/mysqld.cnf ในขณะที่ Red Hat based distributions เช่น CentOS ไฟล์จะอยู่ที่ /etc/my.cnf

เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความของคุณ:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

ค้นหาบรรทัดที่เริ่มต้นด้วยการ bind-address และตั้งค่าเป็นที่อยู่ IP ที่เซิร์ฟเวอร์ MySQL ควรฟัง

โดยค่าเริ่มต้นค่าถูกตั้งค่าเป็น 127.0.0.1 (ฟังเฉพาะใน localhost)

ในตัวอย่างนี้เราจะตั้งเซิร์ฟเวอร์ MySQL ให้ฟังบนอินเทอร์เฟซ IPv4 ทั้งหมดโดยเปลี่ยนค่าเป็น 0.0.0.0

mysqld.cnf

bind-address = 0.0.0.0 # skip-networking

หากมีบรรทัดที่มีการ skip-networking ให้ลบหรือใส่ความคิดเห็นโดยเพิ่ม # ที่จุดเริ่มต้นของบรรทัด

ใน MySQL 8.0 ขึ้นไปคำสั่ง bind-address อาจไม่ปรากฏขึ้น ในกรณีนี้เพิ่มภายใต้ มาตรา.

เมื่อเสร็จแล้วให้เริ่มบริการ MySQL เพื่อให้การเปลี่ยนแปลงมีผล เฉพาะผู้ใช้ root หรือผู้ใช้ที่มีสิทธิ์ sudo เท่านั้นที่สามารถเริ่มบริการใหม่ได้

ในการรีสตาร์ทบริการ MySQL บน Debian หรือ Ubuntu ให้พิมพ์:

sudo systemctl restart mysql

ใน RedHat ตามการกระจายเช่น CentOS เพื่อเริ่มการทำงานของบริการ:

sudo systemctl restart mysqld

การให้สิทธิ์การเข้าถึงแก่ผู้ใช้จากเครื่องระยะไกล

ขั้นตอนต่อไปคือการอนุญาตให้เข้าถึงฐานข้อมูลไปยังผู้ใช้ระยะไกล

ล็อกอินเข้าสู่เซิร์ฟเวอร์ MySQL ในฐานะผู้ใช้รูทโดยพิมพ์:

sudo mysql

mysql -uroot -p

จากภายใน MySQL shell ใช้คำสั่ง GRANT เพื่อให้สิทธิ์การเข้าถึงสำหรับผู้ใช้ระยะไกล

GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

ที่ไหน:

  • database_name เป็นชื่อของฐานข้อมูลที่ผู้ใช้จะเชื่อมต่อ user_name เป็นชื่อของผู้ใช้ MySQL ip_address เป็นที่อยู่ IP ที่ผู้ใช้จะเชื่อมต่อ ใช้ % เพื่ออนุญาตให้ผู้ใช้เชื่อมต่อจากที่อยู่ IP ใด ๆ user_password เป็นรหัสผ่านของผู้ใช้

ตัวอย่างเช่นในการให้สิทธิ์การเข้าถึงฐานข้อมูล dbname แก่ผู้ใช้ชื่อ foo ด้วยรหัสผ่าน my_passwd จากเครื่องไคลเอ็นต์ที่มี IP 10.8.0.5 คุณจะต้องรัน:

GRANT ALL ON dbname.* TO foo@'10.8.0.5' IDENTIFIED BY 'my_passwd';

การกำหนดค่าไฟร์วอลล์

ขั้นตอนสุดท้ายคือการกำหนดค่าไฟร์วอลล์ของคุณเพื่ออนุญาตการรับส่งข้อมูลบนพอร์ต 3306 (พอร์ตเริ่มต้นของ MySQL) จากเครื่องระยะไกล

iptables

sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

อนุญาตการเข้าถึงจากที่อยู่ IP ที่เฉพาะเจาะจง:

sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT

UFW

UFW เป็นเครื่องมือไฟร์วอลล์เริ่มต้นใน Ubuntu หากต้องการอนุญาตการเข้าถึงจากที่อยู่ IP ใด ๆ บนอินเทอร์เน็ต (ไม่ปลอดภัย) ให้เรียกใช้:

sudo ufw allow 3306/tcp

อนุญาตการเข้าถึงจากที่อยู่ IP ที่เฉพาะเจาะจง:

sudo ufw allow from 10.8.0.5 to any port 3306

FirewallD

FirewallD เป็นเครื่องมือจัดการไฟร์วอลล์เริ่มต้นใน CentOS หากต้องการอนุญาตการเข้าถึงจากที่อยู่ IP ใด ๆ บนอินเทอร์เน็ต (ไม่ปลอดภัย) ประเภท:

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp sudo firewall-cmd --reload

หากต้องการอนุญาตการเข้าถึงจากที่อยู่ IP ที่ระบุในพอร์ตเฉพาะคุณสามารถสร้างโซน FirewallD ใหม่หรือใช้กฎที่หลากหลาย สร้างโซนใหม่ชื่อ mysqlzone :

sudo firewall-cmd --new-zone=mysqlzone --permanent sudo firewall-cmd --reload sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32 sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp sudo firewall-cmd --reload

ตรวจสอบการเปลี่ยนแปลง

ในการตรวจสอบว่าผู้ใช้ระยะไกลสามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ได้ให้รันคำสั่งต่อไปนี้:

mysql -u user_name -h mysql_server_ip -p

โดยที่ user_name เป็นชื่อของผู้ใช้ที่คุณให้สิทธิ์การเข้าถึงและ mysql_server_ip เป็นที่อยู่ IP ของโฮสต์ที่เซิร์ฟเวอร์ MySQL ทำงาน

หากการตั้งค่าทุกอย่างถูกต้องคุณจะสามารถเข้าสู่เซิร์ฟเวอร์ MySQL ระยะไกล

ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"

ข้อผิดพลาดด้านล่างแสดงว่าผู้ใช้ที่คุณพยายามเข้าสู่ระบบไม่มีสิทธิ์เข้าถึงเซิร์ฟเวอร์ MySQL ระยะไกล

"ERROR 1130 (HY000): Host '10.8.0.5' is not allowed to connect to this MySQL server"

ข้อสรุป

MySQL ซึ่งเป็นเซิร์ฟเวอร์ฐานข้อมูลโอเพ่นซอร์สที่ได้รับความนิยมมากที่สุดโดยค่าเริ่มต้นจะรับฟังการเชื่อมต่อขาเข้าเฉพาะบน localhost เท่านั้น

ในการอนุญาตการเชื่อมต่อระยะไกลไปยังเซิร์ฟเวอร์ MySQL คุณต้องทำตามขั้นตอนต่อไปนี้:

  1. กำหนดค่าเซิร์ฟเวอร์ MySQL ให้ฟังบนอินเทอร์เฟซทั้งหมดหรือเฉพาะการเข้าถึงระดับผู้ใช้ระยะไกลเปิดพอร์ต MySQL ในไฟร์วอลล์ของคุณ
mysql mariadb