আপনি যদি MySQL ডেটাবেসের সাথে কাজ করেন, তবে আপনি ইতিমধ্যেই জানেন আপনার ডেটাবেস নিরাপদ রাখতে কত চ্যালেঞ্জ মোকাবিলা করতে হয়। SQL ইনজেকশন ব্যবহার করে ডেটাবেস হ্যাক করার চেষ্টা থেকে ব্রুট ফোর্স আক্রমণ পর্যন্ত, ডেটা নিরাপদ রাখা কঠিন — বিশেষ করে যদি আপনি রিমোটলি ডেটাবেসের সাথে কাজ করেন।
SQL সার্ভারকে রিমোট কানেকশন অনুমতি দিতে কনফিগার করার উপায় রয়েছে, কিন্তু সতর্ক থাকতে হবে কারণ MySQL সার্ভারে রিমোট কানেকশন অনুমতি দিলে আপনার ডেটাবেস হ্যাকারদের জন্য সহজ লক্ষ্য হতে পারে। আপনি যদি MySQL ডেটাবেসে সুরক্ষিত রিমোট কানেকশন অনুমতি দিতে চান, তবে নিচের বিষয়গুলো জানতে হবে।
শুরু করার আগে
MySQL ডেটাবেসে যেকোনো পরিবর্তন আনার আগে, আপনার ডেটাবেসের ব্যাকআপ নিন, বিশেষ করে যদি আপনি প্রোডাকশন সার্ভার (সক্রিয় ব্যবহারের সার্ভার) নিয়ে কাজ করেন। আপনি যা ডেটাবেসে বা সেটি হোস্ট করে এমন সার্ভারে পরিবর্তন আনবেন, সেটি যদি ভুল হয়ে যায় তবে সিরিয়াস ডেটা লস হতে পারে।
আপনি দেখতে পাবেন যে সার্ভারের কানেকশনগুলোর পরিবর্তন আপনাকে পরে সেটি অ্যাক্সেস করতে বাধা দিতে পারে। এমন হলে সার্ভার অ্যাডমিনিস্ট্রেটরের সাথে পরামর্শ করতে হতে পারে। ভালো идея হলো যেকোনো পরিবর্তন লোকালি-রান MySQL সার্ভারে ট্রাই করা যাতে রিমোটলি চেষ্টা করার আগে আপনার পরিবর্তনগুলো কাজ করছে কিনা বুঝতে পারেন।
রিমোট সার্ভারে পরিবর্তন আনতে হলে, সAFEভাবে সংযোগ করে পরিবর্তন আনতে SSH (Secure Shell) সেরা উপায়। SSH ব্যবহার করে আপনি আপনার রিমোট সার্ভারের সাথে সংযোগ করতে পারেন। লোকাল নেটওয়ার্কের সার্ভারগুলো (যেমন রাসপবERRY Pi-তে হোস্ট করা সার্ভার) সাথে সংযোগ করার জন্যও SSH ব্যবহার করা যায়।
এই গাইড MySQL-কে রিমোট কানেকশন অনুমতি দিতে কনফিগার করার ধাপগুলো দেখাবে, কিন্তু আপনাকে নিশ্চিত করতে হবে যে আপনার MySQL সার্ভার হোস্ট করে এমন সার্ভারে ডিরেক্ট বা রিমোট অ্যাক্সেস আছে।
মান लीজिए আপনার সার্ভারের সাথে SSH-এর মাধ্যমে রিমোট অ্যাক্সেস নেই। সেক্ষেত্রে আপনি সরাসরি MySQL ডেটাবেসকে রিমোট কানেকশন অনুমতি দিতে কনফিগার করতে পারবেন না, যদি না আপনার রুট MySQL অ্যাকাউন্ট ইতিমধ্যে রিমোট কানেকশন অনুমতি দেয়। তাই আপনাকে আগে এই সংযোগ স্থাপন করতে হবে।
MySQL কনফিগারেশন ফাইল সম্পাদনা করুন
MySQL-কে রিমোট কানেকশন অনুমতি দিতে কনফিগার করার প্রথম ধাপ হলো MySQL কনফিগারেশন ফাইল সম্পাদনা করা। এই ধাপে এই গাইড অনুমান করবে যে আপনি ইতিমধ্যে সার্ভার, পিসি, বা ম্যাক (যেটি আপনার MySQL ডেটাবেস হোস্ট করে) সাথে রিমোটলি সংযুক্ত হয়েছেন এবং কনসোল অ্যাক্সেস আছে।
বিকল্পভাবে, আপনি ম্যাক বা লিনাক্সে ওপেন টার্মিনাল বা উইন্ডোজে টেক্সট এডিটর ব্যবহার করে লোকাল MySQL সার্ভার কনফিগার করতে পারেন।
- শুরু করতে আপনার পছন্দের কনসোল টেক্সট এডিটর ব্যবহার করে MySQL ডেটাবেস ফাইলটি সম্পাদনা করুন। লিনাক্সে টার্মিনাল বা SSH উইন্ডোতে sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf টাইপ করুন এই ফাইলটি nano এডিটর দিয়ে সম্পাদনা করতে (আপনার MySQL ডেটাবেস ডিফল্ট লোকেশনে থাকলে)।
- যদি আপনি উইন্ডোজ চালান, তবে ফাইল এক্সপ্লোরার খুলুন এবং আপনার MySQL ইনস্টলেশন ফোল্ডারটি এক্সেস করুন (যেমন C:/Program Files/MySQL/MySQL Server 8.0)। ডিফল্ট টেক্সট এডিটর (যেমন Notepad) দিয়ে my.ini ফাইলটি খুলুন। যদি সেটি না থাকে, তবে প্রথমে ফাইলটি তৈরি করুন।
- ম্যাকে, একটি টার্মিনাল উইন্ডো খুলুন এবং sudo nano /usr/local/etc/my.cnf টাইপ করুন। এটি MySQL-এর ডিফল্ট কনফিগারেশন ফাইল যদি আপনি homebrew ব্যবহার করে MySQL ইনস্টল করে থাকেন।
উপরোক্ত লোকেশনগুলো MySQL কনফিগারেশন ফাইলগুলোর ডিফল্ট লোকেশন। যদি এই কমান্ডগুলো কাজ না করে, তবে প্রাসঙ্গিক ফাইলগুলো (my.cnf, mysqld.cnf, বা my.ini) ম্যানুয়ালি খুঁজে বের করতে হবে।
সুরক্ষিত Bind-Address IP রেঞ্জ সেট করুন
- MySQL কনফিগারেশন ফাইল খুললে, কীবোর্ডের অ্যারো কি ব্যবহার করে ফাইলের bind-address সেকশনে যান। এই IP রেঞ্জ আপনার ডেটাবেসের কানেকশনগুলোর সীমা বাঁধে, যা সাধারণত শুধু লোকাল মেশিন বা সার্ভার থেকে কানেকশন অনুমতি দেওয়ার জন্য 127.0.0.1 সেট করা থাকে।
- যদি আপনি আপনার বর্তমান ইন্টারনেট কানেকশন ব্যবহার করে ডিভাইসগুলোর কানেকশন অনুমতি দিতে চান, তবে প্রথমে আপনার পাবলিক IP ঠিকানা খুঁজে বের করুন, তারপর 127.0.0.1 কে সেই IP ঠিকানায় পরিবর্তন করুন। অথবা আপনি যে ডিভাইস বা সার্ভার থেকে কানেকশন অনুমতি দিতে চান তার IP ঠিকানা দিন।
- কিছু পরিস্থিতিতে, আপনি MySQL ডেটাবেসে সব রিমোট কানেকশন অনুমতি দিতে চাইতে পারেন। এতে চরম ঝুঁকি থাকে এবং প্রোডাকশন সার্ভারে এটি ব্যবহার করা উচিত নয়। তবুও যদি চান, তবে 127.0.0.1 কে 0.0.0.0 দিয়ে প্রতিস্থাপন করুন।
- Basic Settings সেকশনের port ভ্যালু নোট করুন। এটি পরবর্তী সেকশনে প্রয়োজন হবে। যদি দৃশ্যমান না থাকে, তবে ডিফল্ট ভ্যালু ব্যবহার করা হবে, যা পোর্ট 3306। আপনি নতুন লাইনে port = xxxx লিখে নিজের পছন্দের পোর্ট যোগ করতে পারেন (xxxx-এর জায়গায় উপযুক্ত পোর্ট মান বসান)।
- MySQL কনফিগারেশন ফাইলে bind-address কনফিগার করলে ফাইলটি সংরক্ষণ করুন। লিনাক্সে Ctrl + O এবং Ctrl + X চাপুন। ম্যাকেও Command + O এবং Command + X। উইন্ডোজ ব্যবহারকারী File > Save বেছে নিয়ে সংরক্ষণ করতে পারেন।
- এরপর লিনাক্স এবং ম্যাক ব্যবহারকারী mysql.server stop && mysql.server start বা mysql.server restart টাইপ করে MySQL রিস্টার্ট করতে পারেন। sudo দিয়ে কমান্ডটি elevate করতে হতে পারে (যেমন sudo mysql.server restart) এবং mysql.server ফাইলের উপযুক্ত পাথ ব্যবহার করতে হতে পারে (যেমন /usr/local/bin/mysql.server)।
- যদি উপরের কমান্ড কাজ না করে, তবে sudo service mysql restart চেষ্টা করুন।
- উইন্ডোজে MySQL রিস্টার্ট করতে, স্টার্ট মেনু রাইট-ক্লিক করে Windows PowerShell (Admin) খুলুন। PowerShell উইন্ডোতে net stop mysql80 টাইপ করে এরপর net start mysql80 টাইপ করুন, mysql80-কে আপনার পিসির সঠিক সার্ভিস নাম দিয়ে প্রতিস্থাপন করুন।
যদি আপনি উইন্ডোজে সঠিক সার্ভিস নাম নিশ্চিত না হন, তবে net start টাইপ করে খুঁজে বের করুন। আপনি যদি কনফিগারেশন রিলোড না कर सकেন, তবে সার্ভার রিস্টার্ট করে প্রয়োজনে MySQL ম্যানুয়ালি রিলোড করুন।
ফায়ারওয়াল কনফিগার করুন
এই পর্যায়ে, আপনার MySQL ডেটাবেসকে আপনার সেট করা bind-address ভ্যালুর IP ঠিকানা থেকে রিমোট কানেকশন অনুমতি দিতে হবে (বা সব ডিভাইস থেকে যদি আপনি 0.0.0.0 সেট করে থাকেন)। কিন্তু কানেকশনগুলো এখনও আপনার ডিভাইস বা নেটওয়ার্ক ফায়ারওয়াল দ্বারা ব্লক করা থাকবে।
বেশিরভাগ সার্ভার এবং পিসি ফায়ারওয়াল ব্যবহার করে কানেকশন ব্লক করে রাখে, নির্দিষ্ট পোর্টে অ্যাক্সেস দেওয়া না থাকলে। এই কনফিগারেশনের ধাপগুলো ভিন্ন হবে, নির্ভর করবে আপনি উইন্ডোজ বা লিনাক্স চালাচ্ছেন কিনা। ম্যাক ফায়ারওয়াল ডিফল্টভাবে ডিজেবল থাকে, তাই এখানে আপনাকে কিছু করতে হবে না।
লিনাক্স ফায়ারওয়াল কনফিগার করুন
অনেক লিনাক্স সার্ভার iptables ডিফল্ট ফায়ারওয়াল ইউটিলিটি হিসেবে ব্যবহার করে। নিচের ধাপগুলো অনুসরণ করে কনফিগার করুন।
- টার্মিনাল বা SSH সংযোগ খুলুন এবং টাইপ করুন sudo iptables -A INPUT -p tcp -s X.X.X.X –dport YYYY -j ACCEPT। X.X.X.X-কে সেই IP ঠিকানায় পরিবর্তন করুন যেটি আপনি MySQL কানেকশন অনুমতি দিতে চান থেকে, এবং YYYY-কে আপনার MySQL কনফিগারেশন ফাইল থেকে মিলে যাওয়া পোর্ট ভ্যালু দিয়ে (যেমন 3306)।
- এটি ফায়ারওয়ালকে সাময়িকভাবে কনফিগার করবে। ডেবিয়ান বা উবুন্টু-ভিত্তিক লিনাক্স সার্ভার ব্যবহার করলে, এই পরিবর্তনটি स्थায়ী করতে sudo netfilter-persistent save এবং sudo netfilter-persistent reload টার্মিনাল বা SSH উইন্ডোতে টাইপ করুন।
যদি iptables আপনার লিনাক্স ডিস্ট্রিবিউশনের ডিফল্ট ফায়ারওয়াল টুল না হয়, তবে আপনার ডিস্ট্রিবিউশনের ইউজার ম্যানুয়াল দেখুন। যদি কিছু প্যাকেজ (যেমন netfilter-persistent) উপলব্ধ না থাকে, তবে আপনার ডিস্ট্রিবিউশনের সফটওয়্যার রিপোজিটরি টুল ব্যবহার করে ইনস্টল করুন (যেমন sudo apt install netfilter-persistent)।
উইন্ডোজ ফায়ারওয়াল কনফিগার করুন
আপনি যদি উইন্ডোজ পিসি বা সার্ভার ব্যবহার করে ডেটাবেস হোস্ট করেন, তবে নিচের ধাপগুলো অনুসরণ করে ফায়ারওয়াল কনফিগার করুন:
- স্টার্ট মেনু রাইট-ক্লিক করে 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 চাপে ফায়ারওয়াল রুল লিস্টে যোগ করুন।
যদি কানেকশন করতে সমস্যা হয়, তবে উপরের ধাপগুলো পুনরাবৃত্তি করুন, নিশ্চিত করুন যে আপনি ফায়ারওয়াল সেটিংসে একই ডিটেইলস (পোর্ট 3306, ইত্যাদি) দিয়ে একটি নতুন outbound rule তৈরি করেছেন। আপনাকে আপনার লোকাল নেটওয়ার্ক রাউটার কনফিগার করতে হতে পারে যাতে ডেটাবেসের ইনবাউন্ড এবং আউটবাউন্ড কানেকশনের জন্য প্রয়োজনীয় পোর্টগুলো খোলা থাকে।
MySQL ব্যবহার করে রিমোট সার্ভারের সাথে সংযোগ করুন
MySQL ডেটাবেসকে রিমোট কানেকশন অনুমতি দিতে কনফিগার করার পর, আপনাকে আসলে সেটির সাথে সংযোগ স্থাপন করতে হবে। এটি আপনি টার্মিনাল বা PowerShell উইন্ডো থেকে mysql কমান্ড (mysql.exe উইন্ডোজে) ব্যবহার করে করতে পারেন।
উইন্ডোজ চালাচ্ছেন তবে লোকালি MySQL ইনস্টল করা আছে কিনা নিশ্চিত করুন। ম্যাক ব্যবহারকারী টার্মিনাল থেকে homebrew ব্যবহার করে MySQL ইনস্টল করতে পারেন (brew install mysql), লিনাক্স ব্যবহারকারী লোকাল অ্যাপ রিপোজিটরি ব্যবহার করে (যেমন sudo apt install mysql) প্রয়োজনীয় প্যাকেজ ইনস্টল করতে পারেন।
লিনাক্স বা ম্যাকে MySQL-এ সংযোগ করুন
- রিমোট MySQL সার্ভারের সাথে সংযোগ করতে লিনাক্স বা ম্যাকে একটি নতুন টার্মিনাল উইন্ডো খুলুন এবং টাইপ করুন mysql -u username -h X.X.X.X:XXXX -p। X.X.X.X:XXXX-কে আপনার রিমোট সার্ভারের IP ঠিকানা এবং পোর্ট নম্বরে (যেমন 100.200.100.200:3306) এবং username-কে আপনার MySQL ইউজারনেম দিয়ে প্রতিস্থাপন করুন।
- প্রম্পটে পাসওয়ার্ড подтверждение করুন। সংযোগ সফল হলে টার্মিনালে সাফল্যের বার্তা দেখাবে।
উইন্ডোজে MySQL-এ সংযোগ করুন
- স্টার্ট মেনু রাইট-ক্লিক করে Windows PowerShell (Admin) নির্বাচন করে একটি নতুন PowerShell উইন্ডো খুলুন।
- নতুন 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 ঠিকানা এবং পোর্ট নম্বরে (যেমন 100.200.100.200:3306) এবং username-কে এমন একটি MySQL ইউজারনেম দিয়ে প্রতিস্থাপন করুন যা রিমোট অ্যাক্সেস অনুমতি দেয় (যেমন root)। অন্য অনুসন্ধান নির্দেশনা অনুসরণ করুন।
- প্রম্পটে পাসওয়ার্ড দিন সাইন-ইন প্রক্রিয়া সম্পূর্ণ করে আপনার MySQL ডেটাবেসে রিমোটলি অ্যাক্সেস করুন।
যদি এটি কাজ না করে, তবে SSH ব্যবহার করে (বা সরাসরি অ্যাক্সেস করে) আপনার MySQL সার্ভার হোস্ট করে এমন সার্ভার বা পিসির সাথে সংযোগ করুন -h localhost আর্গুমেন্ট ব্যবহার করে। তারপর নিচের ধাপগুলো অনুসরণ করে একটি উপযুক্ত ইউজার অ্যাকাউন্ট তৈরি করুন।
MySQL ডেটাবেসে রিমোট ইউজার অ্যাক্সেস অনুমতি দিন
এই পর্যায়ে, আপনি আপনার সার্ভারের রুট ইউজার অ্যাকাউন্ট বা অন্য কোনো বর্ধিত সুবিধা得益的 ইউজার অ্যাকাউন্ট ব্যবহার করে রিমোটলি MySQL সার্ভারের সাথে সংযোগ করতে পারবেন। যেহেতু এই লেভেলের অ্যাক্সেস নিরাপদ নয়, তাই আপনি আপনার MySQL ডেটাবেস অ্যাক্সেস করার জন্য একটি আরও সীমাবদ্ধ অ্যাকাউন্ট তৈরি করতে পছন্দ করতে পারেন।
এই অ্যাকাউন্টের আপনার MySQL সার্ভারের সীমিত অ্যাক্সেস থাকবে, যা শুধু নির্বাচিত ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে পারবে। এটি আরও সিরিয়াস পরিবর্তন করতে পারবে না, যেমন অন্য ডেটাবেসের ডেটা অ্যাক্সেস করা, নতুন ইউজার অ্যাকাউন্ট তৈরি করা, ইত্যাদি।
আপনাকে আপনার MySQL সার্ভারে রিমোটলি সাইন ইন করার ক্ষমতা থাকতে হবে। যদি আপনি রুট অ্যাকাউন্ট রিমোটলি ব্যবহার না कर सकেন, তবে আপনাকে আপনার সার্ভারের শেল অ্যাক্সেস করতে হবে mysql কমান্ড ব্যবহার করে রিমোট SSH সংযোগের মাধ্যমে বা সার্ভার হোস্ট করে এমন পিসি বা সার্ভারকে সরাসরি অ্যাক্সেস করে।
- আপনার রিমোট MySQL শেলে ( mysql টুল ব্যবহার করে), টাইপ করুন CREATE USER “username”@”x.x.x.x” IDENTIFIED BY “password”; এবং Enter চাপুন। username-কে আপনি যে ইউজারনেম তৈরি করতে চান, x.x.x.x-কে যে IP ঠিকানা থেকে সংযোগ করবেন, এবং 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 কী জেনারেট করা, পুরানো (এবং সহজে অনুমানযোগ্য) পাসওয়ার্ডের উপর নির্ভর না করে।
আপনি যদি ডেটা লস নিয়ে চিন্তিত হন, তবে আপনি সহজেই অনলাইনে আপনার ডেটাবেস ব্যাকআপ নিতে পারেন। অধিকাংশ ডেটাবেস লিনাক্স সার্ভারে চলে — আপনি সহজে লিনাক্স ফাইল ব্যাকআপ অটোমেট করতে পারেন। আপনি যদি উইন্ডোজে MySQL চালান, তবে উইন্ডোজের জন্য একই রকম অটোমেটিক ব্যাকআপ সিস্টেম সেট আপ করতে পারেন, যাতে জরুরি অবস্থায় আপনি আপনার ডেটা রিস্টোর করতে পারেন।