जब भी एप्लिकेशन सुरक्षा का उल्लेख किया जाता है, लोग इंजेक्शन, टूटे प्रमाणीकरण, संवेदनशील डेटा एक्सपोजर, और इसी तरह के कुछ सबसे लगातार हमलों के खिलाफ अनुप्रयोगों को सुरक्षित करने के बारे में सोचते हैं। हालाँकि, जबकि ये हमले प्रचलित हैं, केवल यह जानना पर्याप्त नहीं होगा कि आपके एप्लिकेशन को उनसे कैसे बचाया जाए - खासकर जब आप MySQL चला रहे हों। आज हम सुरक्षा के एक अलग पक्ष को देखने जा रहे हैं - हम यह देखने जा रहे हैं कि MySQL को ठीक से कैसे सुरक्षित किया जाए।
चूंकि MySQL सुरक्षा एक बहुत बड़ी बात है, इस पोस्ट को MySQL सुरक्षा उपायों से संबंधित पोस्ट की एक श्रृंखला की शुरुआत के रूप में मानें। हम सब कुछ कवर नहीं करेंगे, लेकिन इस पोस्ट को MySQL के कुछ सुरक्षा उपायों की नींव प्रदान करनी चाहिए।
आपको MySQL को सुरक्षित करने की आवश्यकता क्यों है?
सबसे पहले, हमें इस प्रश्न का उत्तर देना चाहिए कि हम MySQL को सुरक्षित क्यों करना चाहते हैं। आखिरकार, अगर हम अपने आवेदन को सबसे प्रचलित खतरों से सुरक्षित रखते हैं, तो हमें सुरक्षित रहना चाहिए, है ना? खैर, हाँ और नहीं।
आप देखते हैं, जब आप कुछ हमलों के खिलाफ अपने आवेदन को सुरक्षित करते हैं, तो आप सुनिश्चित करते हैं कि हमलावरों को आपके आवेदन की सुरक्षा में कठिन समय हो - हालांकि आपके डेटाबेस को सुरक्षित करने के लिए, ऐसे हमलों से बचाव करना होगा पर्याप्त न हो। अपने डेटाबेस को सुरक्षित रखना आखिरी स्ट्रॉ हो सकता है जो आपके एप्लिकेशन (और आपके डेटाबेस!) को विनाश से बचा सकता है।
मैं MySQL को कैसे सुरक्षित करूं?
अब, ज्वलंत प्रश्न पर। आप वास्तव में MySQL को कैसे सुरक्षित करते हैं?
अपने MySQL इंस्टेंस की सुरक्षा के बारे में सोचते समय, आपको संभावित विकल्पों की एक विस्तृत श्रृंखला पर विचार करना चाहिए। सौभाग्य से, उनमें से कुछ विकल्प MySQL तक सीमित नहीं हैं, जिसका अर्थ है कि वे अन्य परिदृश्यों में भी लागू होंगे! हम सामान्य बातों से शुरुआत करेंगे।
MySQL सुरक्षा - सामान्य
MySQL को सुरक्षित करते समय, ध्यान रखें कि यह उपयोगकर्ताओं द्वारा किए गए संचालन के लिए सुरक्षा-आधारित एक्सेस कंट्रोल लिस्ट (ACL) का उपयोग करता है (एक्सेस कंट्रोल लिस्ट किसी ऑब्जेक्ट से जुड़ी अनुमतियों की एक सूची है)। यहां कुछ सबसे बुनियादी सुरक्षा समस्याओं का ध्यान रखने का तरीका बताया गया है:
- प्रारंभिक MySQL खाते को सुरक्षित करें - यह बहुत स्पष्ट है, लेकिन आपको यह सुनिश्चित करना चाहिए कि रूट खाते में एक पासवर्ड है। रूट खाते में पासवर्ड हो सकता है या नहीं भी हो सकता है जब MySQL पहली बार स्थापित होता है - आप यह पता लगा सकते हैं कि त्रुटि लॉग की जांच करके पासवर्ड क्या है, फिर यदि आप चाहें तो इसे एक मजबूत में बदल सकते हैं। अन्य सभी खातों में भी पासवर्ड होने चाहिए।
- किसी भी MySQL डेटाबेस के अंदर पासवर्ड को सादे टेक्स्ट में स्टोर न करें - BCrypt जैसे वन-वे हैशिंग फ़ंक्शन का उपयोग करें।
- किसी भी उपयोगकर्ता को mysql डेटाबेस में उपयोगकर्ता तालिका तक पहुंच प्रदान न करें (रूट उपयोगकर्ता एक अपवाद है)।
इसके अलावा, MySQL में एक्सेस कंट्रोल और अकाउंट मैनेजमेंट से खुद को परिचित करें। यह विषय अपने आप में एक पूरी किताब का हकदार है, लेकिन आपको जिन बुनियादी बातों को जानना चाहिए उनमें शामिल हैं:
- MySQL में एक्सेस को नियंत्रित करना;
- उपयोगकर्ताओं को बनाना, बदलना और हटाना;
- उपयोगकर्ताओं को और उनसे विशेषाधिकार देना और निरस्त करना;
- यह जानने के लिए कि क्या विशेषाधिकार दिए गए हैं;
- खाता श्रेणियां क्या हैं;
- आरक्षित खाते क्या होते हैं;
- क्या भूमिकाएं हैं;
- पासवर्ड प्रबंधन कैसे काम करता है;
- खाता लॉक करना कैसे काम करता है;
- MySQL द्वारा पेश किए गए सुरक्षा प्लग इन पर एक नज़र डालें;
- यह जानना कि MySQL बैकअप कैसे सुरक्षित करें।
जहां तक MySQL सुरक्षा का संबंध है, बैकअप को भी कवर किया जाना चाहिए।
अब, हम इनमें से प्रत्येक विकल्प पर आगे विचार करेंगे।
MySQL में एक्सेस को नियंत्रित करना
- जैसा कि पहले ही ऊपर उल्लेख किया गया है, रूट खाते को छोड़कर, mysql डेटाबेस में उपयोगकर्ता तालिका तक पहुंच के अलावा, कभी भी कोई खाता न दें;
- सुनिश्चित करें कि सभी मौजूदा MySQL खाते केवल उन्हीं विशेषाधिकारों का उपयोग करते हैं जिनकी उन्हें अपने कार्यों को करने के लिए बिल्कुल आवश्यकता होती है।
MySQL में उपयोगकर्ता बनाना, बदलना और हटाना
MySQL में, उपयोगकर्ता बनाएँ क्वेरी चलाकर उपयोगकर्ता बनाए जा सकते हैं:
CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;
उपयोगकर्ताओं को ALTER USER क्वेरी चलाकर बदला जा सकता है - क्वेरी आपको खातों को लॉक करने और अनलॉक करने सहित कई अलग-अलग काम करने की अनुमति देती है, खाते को SSL का उपयोग करके कनेक्ट करने की आवश्यकता होती है, प्रति घंटे अधिकतम कनेक्शन स्थापित करना, पुराने पासवर्ड को त्यागना आदि। यहां एक नमूना क्वेरी है जो आपका अपना पासवर्ड बदल सकती है:
ALTER USER USER() IDENTIFIED BY ‘password’;
उपयोगकर्ताओं को DROP USER क्वेरी चलाकर हटाया जा सकता है:
DROP USER ‘demouser’@’localhost’;
MySQL में उपयोगकर्ताओं को और उनसे विशेषाधिकार देना और निरस्त करना
GRANT स्टेटमेंट को या तो विशेषाधिकार या भूमिकाएँ देनी चाहिए। ON स्टेटमेंट आपको बता सकता है कि विशेषाधिकार या भूमिकाएँ दी जाएंगी या नहीं। निम्नलिखित क्वेरी विशेषाधिकार प्रदान करती है:
GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’;
निम्नलिखित क्वेरी भूमिका प्रदान करती है:
GRANT ‘demo_role’ TO ‘demouser’@’localhost’;
GRANT को क्वेरी ओके के साथ जवाब देना चाहिए, 0 पंक्तियाँ प्रभावित हुईं।
उपयोगकर्ताओं से कुछ विशेषाधिकारों को निरस्त करने के लिए, REVOKE कथन का उपयोग करें (खाते के नाम का होस्टनाम भाग डिफ़ॉल्ट रूप से "%" है):
REVOKE SELECT ON *.* FROM ‘demouser’@’localhost’;
सभी विशेषाधिकारों को निरस्त करने के लिए, सभी को निरस्त करें का उपयोग किया जा सकता है:
REVOKE ALL PRIVILEGES ON *.* FROM ‘demouser’@’localhost’;
आप फ्लश विशेषाधिकार जारी करना चाह सकते हैं; उपरोक्त चरणों को पूरा करने के बाद बयान।
यह जांचना कि MySQL में कौन से विशेषाधिकार दिए गए हैं
- यह जांचने के लिए कि कौन से विशेषाधिकार दिए गए हैं, SHOW GRANTS जारी करें; बयान।
- जारी किए गए प्रत्येक अनुरोध के लिए, सर्वर उस ऑपरेशन को निर्धारित करता है जिसे आप करना चाहते हैं, फिर जांचता है कि आपके विशेषाधिकार प्रश्न में ऑपरेशन करने के लिए पर्याप्त हैं या नहीं।
- सर्वर एक्सेस नियंत्रण सुनिश्चित करने के लिए mysql डेटाबेस में उपयोगकर्ता और db तालिकाओं का उपयोग करता है।
- उपयोगकर्ता और Global_grants तालिकाएं वैश्विक विशेषाधिकार प्रदान करती हैं।
बाकी विकल्पों को आगामी पोस्ट में शामिल किया जाएगा।
सारांश
जहां तक MySQL सुरक्षा का संबंध है, आपके पास चुनने के लिए विकल्पों की एक विस्तृत श्रृंखला है। विकल्पों में बुनियादी सुरक्षा उपाय शामिल हैं जो लगभग सभी अनुप्रयोगों पर लागू हो सकते हैं, लेकिन कुछ विकल्प MySQL के लिए बहुत विशिष्ट हैं। ध्यान रखें कि सभी उपलब्ध विकल्पों को अभी तक कवर नहीं किया गया है - उनके बारे में MySQL सुरक्षा श्रृंखला के आगामी संस्करणों में भी बात की जाएगी।