ذكري المظهر

كيفية السماح للاتصالات عن بعد إلى خادم قاعدة بيانات mysql

ترامب يستمع لآيات من القرآن الكريم داخل كاتدرائية واشنطن

ترامب يستمع لآيات من القرآن الكريم داخل كاتدرائية واشنطن

جدول المحتويات:

Anonim

بشكل افتراضي ، يستمع خادم MySQL للاتصالات فقط من المضيف المحلي ، مما يعني أنه لا يمكن الوصول إليه إلا عن طريق التطبيقات التي تعمل على نفس المضيف.

ومع ذلك ، في بعض الحالات ، من الضروري الوصول إلى خادم 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 مثل CentOS ، يوجد الملف على /etc/my.cnf .

افتح الملف باستخدام محرر النصوص الخاص بك:

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

ابحث عن سطر يبدأ bind-address وضبط قيمته على عنوان IP الذي يجب على خادم MySQL الاستماع إليه.

بشكل افتراضي ، يتم تعيين القيمة إلى 127.0.0.1 (يستمع فقط في المضيف المحلي).

في هذا المثال ، سنقوم بتعيين خادم MySQL للاستماع على جميع واجهات IPv4 عن طريق تغيير القيمة إلى 0.0.0.0

mysqld.cnf

bind-address = 0.0.0.0 # skip-networking

إذا كان هناك خط يحتوي skip-networking ، فاحذفه أو علق عليه بإضافة # في بداية السطر.

في MySQL 8.0 والإصدارات الأحدث ، قد لا يكون توجيه bind-address . في هذه الحالة ، إضافته تحت الجزء.

بمجرد الانتهاء ، أعد تشغيل خدمة MySQL لتصبح التغييرات نافذة المفعول. يمكن فقط الجذر أو المستخدمين الذين لديهم امتيازات sudo إعادة تشغيل الخدمات.

لإعادة تشغيل خدمة MySQL على دبيان أو أوبونتو ، اكتب:

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 هو الاسم od المستخدم 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 الافتراضي) من الأجهزة البعيدة.

إيبتبلس

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 هي أداة جدار الحماية الافتراضية في أوبونتو. للسماح بالوصول من أي عنوان 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 ، خادم قاعدة البيانات مفتوحة المصدر الأكثر شعبية بشكل افتراضي ، يستمع للاتصالات الواردة فقط على المضيف المحلي.

للسماح بالاتصالات عن بُعد بخادم MySQL ، تحتاج إلى تنفيذ الخطوات التالية:

  1. تكوين خادم MySQL للاستماع على جميع أو واجهة محددة.منح الوصول إلى المستخدم عن بعد.فتح منفذ MySQL في جدار الحماية الخاص بك.
مسيل مريب