تاریخ امروز۱۴۰۳-۰۱-۱۱

دسترسی ریموت به MySQL – مای‌اس‌کیو‌ال چیست

دسترسی ریموت به MySQL چگونه است؟ احتمالا با MySQL و کاربرد آن آشنایی داشته باشید، زیرا یکی از محبوب‌ترین سیستم‌هایی است که به عنوان مدیریت پایگاه داده استفاده می‌شود.

بسیاری از وب‌سایت‌ها و اپلیکیشن‌ها با وب‌سرور و دیتابیسی که مسئول ذخیره داده‌های پشتیبان است، شروع به کار می‌کنند.

با گذشت زمان و افزایش مقیاس اپلیکیشن‌ها، تنظیم مقیاس‌ آن‌ها دشوارتر خواهد شد؛ اما مدیران با ارائه دسترسی ریموت به MySQL، می‌توانند دسترسی کامل به پایگاه داده را از راه دور به کاربران اعطا نمایند تا بتوانند به‌سرعت وب‌سرورها و دیتابیس‌های خود را مدیریت و ویرایش کنند.

در این مقاله قصد داریم شما را به طور مختصر با این پایگاه داده محبوب آشنا نماییم و سپس مرحله به مرحله نحوه دسترسی ریموت به MySQL را آموزش دهیم. پس تا پایان این مطلب کاربردی همراه ما باشید.

MySQL چیست

MySQL یک سیستم مدیریت پایگاه داده رابطه‌ای منبع باز است که همانند سایر پایگاه‌های داده رابطه‌ای، داده‌ها را در جداول تشکیل‌شده از ردیف و ستون ذخیره می‌کند.

مای‌اس‌کیو‌ال توسط زبان‌های برنامه نویسی مختلف مانند Python، PHP و جاوا اسکریپت پشتیبانی می‌شود، بنابراین می‌توانید آن را بر روی هر پلتفرم یا سیستم عاملی اجرا نمایید.

هر سیستم یا نرم‌افزاری که بخواهد داده‌های خود را در مکانی ذخیره کند، لازم است با دیتابیس آشنایی داشته باشد.

برای آشنایی با دیتابیس شما را به خواندن مقاله دیتابیس چیست دعوت می‌نماییم.

در MySQL حتی افراد مبتدی نیز می‌توانند داده‌های خود را ذخیره کنند و از امکانات آن بهره‌مند شوند.

همچنین کاربران می‌توانند داده‌ها را با استفاده از زبان پرس و جو ساختاریافته، که بیشتر با نام SQL شناخته می‌شود، کنترل کنند.

MySQL به عنوان بخشی از پشته فناوری پرکاربرد LAMP (که شامل یک سیستم عامل مبتنی بر لینوکس، وب سرور آپاچی، پایگاه داده MySQL و PHP برای پردازش است)، برای ذخیره و بازیابی داده‌ها در طیف گسترده‌ای از برنامه‌های کاربردی محبوب استفاده می‌شود.

دسترسی ریموت به MySQL

اتصال remote به پایگاه داده به دلایل امنیتی همواره غیرفعال می‌باشد. یکی از رایج‌ترین مشکلاتی که کاربران در راه‌اندازی پایگاه داده MySQL از راه دور با آن مواجه می‌شوند، این است که دسترسی ریموت MySQL آنها فقط برای پذیرفتن اتصالات محلی پیکربندی شده است.

پذیرفتن اتصالات محلی تنظیمات پیش‌فرض MySQL است، اما برای راه‌اندازی پایگاه داده از راه دور کار نمی‌کند، زیرا MySQL باید بتواند به یک آدرس IP خارجی که در آن به سرور دسترسی داشته باشد، گوش دهد.

برای فعال کردن این قسمت، فایل mysqld.cnf خود را باز کنید:

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

سپس خطی را پیدا کنید که با دستور bind-address شروع می‌شود:

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

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1
. . .

به طور پیش فرض، این مقدار روی ۱۲۷٫۰٫۰٫۱ تنظیم شده است و نشان دهنده این مسئله می‌باشد که سرور فقط اتصالات محلی را می‌پذیرد.

لازم است برای اتصال آدرس IP خارجی، ۱۲۷٫۰٫۰٫۱ IP را با آدرس IP دیگری جایگزین کنید.

برای تست و عیب‌یابی، می‌توانید مطابق دستور زیر ۱۲۷٫۰٫۰٫۱ IP را روی یک آدرس IP wildcard، یا *، ::، یا ۰٫۰٫۰٫۰ تنظیم نمایید.

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

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0
. . .

به این نکته دقت داشته باشید که ممکن است در نسخه های خاصی از MySQL دستورالعمل bind-address به طور پیش فرض در فایل mysqld.cnf وجود نداشته باشد.

در این صورت، باید مطابق دستور زیر، bind-address را به صورت دستی به انتهای فایل اضافه نمایید.

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

. . .
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
bind-address            = 0.0.0.0

پس از تغییر این خط فایل را با استفاده از کلیدهای CTRL+X ،CTRL+Y دخیره کنید و سپس ببندید. (اگر دستور را با نانو ویرایش کردید، ENTER را وارد کنید)

سپس، سرویس MySQL را با استفاده از دستور زیرمجدداً راه‌اندازی کنید تا تغییراتی که در mysqld.cnf انجام داده‌اید، اعمال شود:

sudo systemctl restart mysql

اگر یک حساب کاربری MySQL دارید که میخواهید از آن برای اتصال به پایگاه داده از هاست ریموت خود استفاده کنید، باید آن حساب را برای اتصال از سرور راه دور به جای هاست محلی تنظیم کنید.

برای انجام این کار، لازم است کاربر MySQL را به عنوان کاربر اصلی با یک حساب کاربری کامل تعریف کنید:

sudo mysql

اگر برای کاربر root احراز هویت رمزعبور را فعال کرده‌اید، باید از دستور زیر برای دسترسی به MySQL shell استفاده کنید:

mysql -u root -p
پیکربندی MySQL
پیکربندی MySQL

پیکربندی MySQL برای دسترسی ریموت

برای تغییر هاست کاربر می‌توانید از دستور RENAME USER در MySQL استفاده کنید.

دستور زیر را اجرا کنید و در آن به‌جای asiatech، نام حساب کاربری خود، یعنی MySQL و به‌جای remote_server_ip، آدرس IP ریموت سرور خود را وارد کرده‌اید.

RENAME USER 'asiatech'@'localhost' TO 'asiatech'@'remote_server_ip';

همچنین، می‌توانید یک حساب کاربری جدید ایجاد کنید که فقط از هاست ریموت متصل شود.

CREATE USER 'asiatech'@'remote_server_ip' IDENTIFIED BY 'password';

یک مشکل شناخته شده در برخی از نسخه‌های PHP وجود دارد که باعث ایجاد مشکل در caching_sha2_password می‌شود و نمی‌توانید با استفاده از آن احراز هویت نمایید.

درصورتی که می‌خواهید از MySQL در یکی از برنامه‌های PHP برای مثال phpMyAdmin استفاده کنید، می‌توانید با استفاده از افزونه قدیمی‌تر  mysql_native_password برای کاربران ایجاد نمایید.

CREATE USER 'asiatech'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';

اگر مطمئن نیستید که همیشه می‌توانید کاربری ایجاد کنید که با caching_sha2_plugin احراز هویت نماید، از طریق دستور زیر اقدام نمایید.

ALTER USER 'asiatech'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';

سپس به کاربر جدید امتیازات مناسب با نیازهای خاص خود را برای ایجاد، تغییر و DROP پایگاه‌های داده، جداول و کاربران اعطا کنید.

اجرای دستور زیر امکان INSERT و  UPDATE و  DELETE داده‌ها را از هر جدولی در سرور اعطا می‌کند.

همچنین این امکان را به کاربر می‌دهد تا داده‌ها را با SELECT جستجو نماید، کلیدهای خارجی را با کلمه کلیدی REFERENCES ایجاد کند و عملیات FLUSH را با امتیاز RELOAD انجام دهد.

با این حال، می‌توانید فقط مجوزهای مورد نیاز را به کاربران اعطا کنید و یا از آنها سلب نمایید.

برای اطلاعات بیشتر در این زمینه شما را به خواندن مقاله نحوه ایجاد کاربر جدید در MySQL و اعطای مجوز به آن دعوت می‌نماییم.

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'asiatech'@'remote_server_ip' WITH GRANT OPTION;

برای اطمینان از عملکرد دستور اجرا شده، دستور را به صورت تمرینی FLUSH PRIVILEGES اجرا نمایید.

با اجرای این دستور هر حافظه‌ای را که سرور در نتیجه دستورهای قبلی  CREATE USER و GRANT در کش ذخیره کرده باشد را حذف می‌نماید.

FLUSH PRIVILEGES;

سپس می‌توانید با استفاده از دستور زیر از کاربر MySQL خارج شوید.

exit

درنهایت، با فرض اینکه یک فایروال را روی سرور پایگاه داده خود پیکربندی کرده‌اید، لازم است پورت پیش‌فرض MySQL یعنی پورت ۳۳۰۶ را باز کنید تا به ترافیک MySQL اجازه دسترسی دهید.

اگر می‌خواهید فقط از یک دستگاه خاص به سرور پایگاه داده دسترسی داشته باشید، می‌توانید با اجرای دستور زیر به آن ماشین اجازه انحصاری برای اتصال به پایگاه داده ریموت را اعطا نمایید.

از وارد نمودن remote_IP_address با آدرس IP واقعی دستگاهی که قصد اتصال به آن را دارید، اطمینان حاصل نمایید.

sudo ufw allow from remote_IP_address to any port 3306

درصورتی که بخواهید در آینده از طریق ماشین های دیگری به پایگاه داده دسترسی پیدا کنید، می‌توانید با استفاده از دستور زیر، به صورت موقت به کاربران موردنظر اجازه دسترسی اعطا نمایید.

فقط به یاد داشته باشید که آدرس IP مرتبط را درج کنید.

همچنین، می‌توانید از طریق هر آدرس IP با دستور زیر به پایگاه داده MySQL خود اجازه اتصال دهید:

قبل از اجرای دستور به این نکته توجه داشته باشید که این دستور همه افراد را قادر می‌سازد تا به پایگاه داده MySQL شما دسترسی داشته باشند. اگر پایگاه داده شما دارای داده‌های حساسی است، دستور زیر را اجرا نکنید.

sudo ufw allow 3306

همچنین، با اجرای دستور زیر می‌توانید ازطریق هر دستگاه به پایگاه داده MySQL دسترسی پیدا کنید:

توجه داشته باشید، در صورتی که با افزودن یک قانون فایروال فقط به یک آدرس IP خاص اجازه اتصال اعطا نمایید، لازم است تنها با آدرس IP مشخص شده به پایگاه داده دسترسی پیدا کنید.

mysql -u user -h database_server_ip -p

پس از اجرای این دستور درصورتی که بتوانید به دیتابیس خود دسترسی پیدا کنید، به منزله این مسئله می‌باشد که مشکلی در دستورالعمل bind-address وجود دارد.

دقت داشته باشید که تنظیم bind-address برروی ۰٫۰٫۰٫۰ ناامن است، زیرا امکان اتصال به سرور شما را از هر آدرس IP فراهم می‌کند.

همچنین، اگر اکنون نمی‌توانید از راه دور به پایگاه داده دسترسی پیدا کنید، ممکن است مشکل از دیگری در قسمت‌های دیگر داشته باشد.

دسترسی ریموت به MySQL
دسترسی ریموت به MySQL

جمع بندی

اعطای دسترسی ریموت به MySQL یکی از عملیات‌های پر‌کاربردی است که مدیران با ارائه دسترسی به کاربران می‌توانند مقیاس کاری خود را افزایش دهند و داده‌های سرور خود را بدون افت سرعت پردازش نمایند.

در این مقاله سعی نمودیم ارائه دسترسی ریموت به MySQL را آموزش دهیم تا بتوانید در سرور مجازی خود کاربر جدیدی ایجاد کنید و پس از تنظیم پیکربندی آن، دسترسی ریموت MySQL مورد‌نیاز را به آن‌ها ارائه نمایید.

ابر آسیاتک با ارائه سرور مجازی رایگان به مدت ۲۴ ساعت، این امکان را برای کاربران فراهم می‌آورد تا برای یادگیری بهتر بتوانند مطالب آموزشی را در سرور خود تست و پیاده‌سازی نمایند.

اشتراک‌گذاری

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *