نحوه اجازه دسترسی از راه دور به MySQL

مقدمه

بسیاری از وب سایت ها و برنامه های کاربردی با وب سرور و پایگاه داده پشتیبان خود که روی یک دستگاه میزبانی می شوند شروع می شوند. هر چند با گذشت زمان، تنظیمی مانند این می تواند دست و پا گیر شود و مقیاس آن دشوار باشد. یک راه حل متداول این است که این توابع را با راه اندازی یک پایگاه داده از راه دور جدا کنید و به سرور و پایگاه داده اجازه دهید تا با سرعت خود در ماشین های خود رشد کنند.

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

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

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

. . .
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
. . .

به طور پیش فرض، این مقدار روی 127.0.0.1 تنظیم شده است، به این معنی که سرور فقط به دنبال اتصالات محلی خواهد بود. شما باید این دستورالعمل را برای ارجاع به یک آدرس IP خارجی تغییر دهید. برای اهداف عیب‌یابی، می‌توانید این دستورالعمل را روی یک آدرس IP wildcard، یا *، ::، یا 0.0.0.0 تنظیم کنید:

. . .
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
. . .

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

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

sudo systemctl restart mysql

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

sudo mysql

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

mysql -u root -p

برای تغییر میزبان کاربر، می توانید از دستور RENAME USER MySQL استفاده کنید. دستور زیر را اجرا کنید، مطمئن شوید که sammy را به نام حساب کاربری MySQL خود و remote_server_ip را به آدرس IP سرور راه دور خود تغییر دهید:

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

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

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

سپس به کاربر جدید امتیازات مناسب برای نیازهای خاص خود را اعطا کنید. مثال زیر به کاربر امتیازات جهانی برای ایجاد، تغییر و رها کردن پایگاه‌های داده، جداول و کاربران و همچنین قدرت درج، به‌روزرسانی و حذف داده‌ها از هر جدول روی سرور را می‌دهد. همچنین به کاربر این امکان را می دهد که داده ها را با SELECT جستجو کند، کلیدهای خارجی را با کلمه کلیدی REFERENCES ایجاد کند و عملیات FLUSH را با امتیاز RELOAD انجام دهد. با این حال، شما فقط باید به کاربران مجوزهای مورد نیاز خود را بدهید، بنابراین در صورت لزوم می توانید امتیازات کاربر خود را تنظیم کنید.

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

پس از این، اجرای دستور FLUSH PRIVILEGES تمرین خوبی است. این کار هر حافظه ای را که سرور در نتیجه دستورات قبلی CREATE USER و GRANT ذخیره کرده است آزاد می کند:

FLUSH PRIVILEGES;

سپس می توانید از مشتری MySQL خارج شوید:

exit

در نهایت، با فرض اینکه یک فایروال را روی سرور پایگاه داده خود پیکربندی کرده اید، همچنین باید پورت 3306 – پورت پیش فرض MySQL – را باز کنید تا به ترافیک MySQL اجازه دهید.

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

sudo ufw allow from remote_IP_address to any port 3306

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

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

sudo ufw allow 3306

به دنبال این، سعی کنید از راه دور از یک دستگاه دیگر به پایگاه داده خود دسترسی پیدا کنید:

mysql -u user -h database_server_ip -p

اگر بتوانید به پایگاه داده خود دسترسی پیدا کنید، تأیید می کند که دستورالعمل bind-address در فایل پیکربندی شما مشکل بوده است. لطفاً توجه داشته باشید که تنظیم bind-address روی 0.0.0.0 ناامن است زیرا امکان اتصال به سرور شما را از هر آدرس IP فراهم می کند. از طرف دیگر، اگر هنوز نمی توانید از راه دور به پایگاه داده دسترسی پیدا کنید، ممکن است مشکل دیگری باعث ایجاد مشکل شده باشد.

 

 

[تعداد: 1   میانگین: 5/5]
دیدگاهتان را بنویسید

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

شاید دوست داشته باشید