MySQL सुरक्षा के बारे में पिछली पोस्ट में, हमने कई विकल्पों को कवर किया है जिनका उपयोग आपके MySQL इंस्टेंस को अधिक सुरक्षित बनाने के लिए किया जा सकता है। उनमें शामिल थे:
- सामान्य MySQL सुरक्षा उपाय;
- MySQL में एक्सेस को नियंत्रित करना;
- MySQL में उपयोगकर्ता बनाना, बदलना और हटाना;
- MySQL में उपयोगकर्ताओं को और उनसे विशेषाधिकार देना और निरस्त करना;
- यह जांचना कि MySQL में उपयोगकर्ताओं को कौन-से विशेषाधिकार दिए गए हैं।
इस पोस्ट में, हम बाकी विकल्पों पर विचार करेंगे, जिनमें शामिल हैं:
- MySQL में खाता श्रेणियां;
- MySQL में भूमिकाएं;
- MySQL में आरक्षित खाते;
- MySQL में पासवर्ड प्रबंधन;
- MySQL में खाता लॉक करना;
- MySQL द्वारा पेश किए गए सुरक्षा प्लगइन्स;
- MySQL बैकअप सुरक्षित करना।
ध्यान रखें कि एक बार फिर, हम पूरी तरह से वह सब कुछ शामिल नहीं करेंगे जो आपको जानना चाहिए, लेकिन हम आपके स्वयं के शोध करने के लिए अच्छे शुरुआती बिंदु प्रदान करने का प्रयास करेंगे।
MySQL में खाता श्रेणियां
खाता श्रेणियों को MySQL 8 में पेश किया गया था - विशेष रूप से, MySQL 8.0.16 में। इसका सार यह है:
- दो अलग-अलग खाता श्रेणियां हैं:नियमित उपयोगकर्ता और सिस्टम उपयोगकर्ता;
- एक नियमित उपयोगकर्ता SYSTEM_USER विशेषाधिकार के बिना एक उपयोगकर्ता है - एक सिस्टम उपयोगकर्ता SYSTEM_USER विशेषाधिकार वाला उपयोगकर्ता है;
- एक नियमित उपयोगकर्ता नियमित खातों को संशोधित कर सकता है - ऐसा उपयोगकर्ता सिस्टम खातों को संशोधित नहीं कर सकता;
- एक सिस्टम उपयोगकर्ता सिस्टम और नियमित खातों दोनों को संशोधित कर सकता है;
- नियमित खातों को नियमित उपयोगकर्ता और सिस्टम उपयोगकर्ता दोनों द्वारा संशोधित किया जा सकता है;
- सिस्टम खाते केवल सिस्टम उपयोगकर्ताओं द्वारा संशोधित किए जा सकते हैं।
MySQL सुरक्षा-वार में खाता श्रेणियों का उपयोग करने के लिए, ध्यान रखें कि SYSTEM_USER विशेषाधिकार खाता हेरफेर, और उनके भीतर सत्र और बयानों को मारने जैसी चीजों को प्रभावित करता है - MySQL में यह अवधारणा कुछ संशोधनों को प्रतिबंधित करने की अनुमति देती है कुछ खाते इस प्रकार MySQL को अधिक सुरक्षित बनाते हैं। खाता श्रेणियों का उपयोग सिस्टम खातों को नियमित खातों द्वारा हेरफेर से बचाने के लिए भी किया जा सकता है:ऐसा करने के लिए, नियमित खातों को mysql स्कीमा संशोधन विशेषाधिकार प्रदान न करें।
किसी खाते को SYSTEM_USER विशेषाधिकार देने के लिए, बनाए गए खाते पर निम्न क्वेरी का उपयोग करें:
GRANT SYSTEM_USER ON *.* TO system_user;
MySQL में भूमिकाएं
MySQL में, भूमिकाएं विशेषाधिकारों का संग्रह हैं। जब आप किसी उपयोगकर्ता खाते को MySQL में एक भूमिका प्रदान करते हैं, तो आप उस भूमिका से जुड़े सभी विशेषाधिकार प्रदान करते हैं। क्रिएट रोल स्टेटमेंट का उपयोग करके भूमिकाएँ बनाई जा सकती हैं:
CREATE ROLE ‘role_1’, ‘role_2’;
भूमिका नामों में एक उपयोगकर्ता भाग और एक होस्ट भाग शामिल होता है - उपयोगकर्ता भाग रिक्त नहीं हो सकता है और यदि निर्दिष्ट नहीं है तो होस्ट भाग "%" पर डिफ़ॉल्ट हो जाता है।
जब भूमिकाएं बनाई जाती हैं, तो आपको उन्हें विशेषाधिकार सौंपने चाहिए। GRANT स्टेटमेंट का उपयोग करके विशेषाधिकार दिए जा सकते हैं:
- सभी डेमो_डेटाबेस पर अनुदान दें।* 'demo_user' को; डेमो_डेटाबेस नामक डेटाबेस पर डेमो_यूसर नामक उपयोगकर्ता को सभी विशेषाधिकार प्रदान करेगा;
- डाटाबेस पर सम्मिलित करें, चुनें, अपडेट करें, हटाएं।* 'demo_user' के लिए; डेमो_डेटाबेस नामक डेटाबेस पर डेमो_यूसर नामक उपयोगकर्ता को INSERT, SELECT, UPDATE, और DELETE विशेषाधिकार प्रदान करेगा;
- demo_database पर चयन प्रदान करें।* 'demo_user' को; डेमो_डेटाबेस नामक डेटाबेस पर डेमो_यूसर नामक उपयोगकर्ता को चयन विशेषाधिकार प्रदान करेगा।
एक व्यक्तिगत उपयोगकर्ता को भूमिका सौंपने के लिए, इस सिंटैक्स का उपयोग करें:
GRANT ‘role_name’ TO ‘user_name’@’localhost’;
एक व्यक्तिगत उपयोगकर्ता को कई भूमिकाएं सौंपने के लिए, इस सिंटैक्स का उपयोग करें:
GRANT ‘role_1’, ‘role_2’ TO ‘user_name’@’localhost’;
एक ही समय में कई उपयोगकर्ताओं को भूमिकाएं सौंपने के लिए, इस सिंटैक्स का उपयोग करें:
GRANT ‘role_name’ TO ‘user1’@’localhost’, ‘user2’@’localhost’;
भूमिकाएं सुरक्षा घटनाओं को रोकने में सहायक हो सकती हैं क्योंकि यदि कोई हमलावर किसी बहुत विशेषाधिकार प्राप्त उपयोगकर्ता का पासवर्ड नहीं जानता है, तो यह मानते हुए कि उपयोगकर्ता बहुत "शक्तिशाली" भूमिका-वार है, आपका एप्लिकेशन (और आपका डेटाबेस) बहुत अच्छी तरह से बचाया जा सकता है।
MySQL में आरक्षित खाते
आरक्षित खातों के संबंध में, ध्यान रखें कि MySQL डेटा निर्देशिका आरंभीकरण के दौरान खाते बनाता है। कुछ खाते हैं जिन्हें MySQL में आरक्षित माना जाना चाहिए:
- 'रूट'@'लोकलहोस्ट' - यह खाता एक सुपरयूज़र खाता है और इसमें सभी MySQL डेटाबेस में भगवान के समान विशेषाधिकार हैं (यह किसी भी MySQL डेटाबेस में कोई भी ऑपरेशन कर सकता है)। यह ध्यान देने योग्य है कि अत्यधिक विशेषाधिकार प्राप्त खाते को उजागर करने से बचने के लिए रूट उपयोगकर्ता का नाम भी बदला जा सकता है। खाते का नाम बदलने के लिए, निम्न क्वेरी चलाएँ:
RENAME USER ‘root’@’localhost’ TO ‘username’@’localhost’;
- FLUSH PRIVILEGES जारी करना सुनिश्चित करें; परिवर्तनों को प्रभावी करने के लिए खाते का नाम बदलने के बाद विवरण।
- 'mysql.sys'@'localhost' - यह खाता एक सिस्टम उपयोगकर्ता है जिसका उपयोग sys स्कीमा में देखने, प्रक्रियाओं और कार्यों के लिए निश्चित के रूप में किया जाता है। रूट खाते का नाम बदलने पर उत्पन्न होने वाली समस्याओं से बचने के लिए MySQL 5.7.9 में जोड़ा गया।
- 'mysql.session'@'localhost' - इस खाते का उपयोग सर्वर तक पहुंचने के लिए प्लगइन्स द्वारा आंतरिक रूप से किया जाता है।
इस मामले में, आप बहुत अधिक सुरक्षा-वार नहीं कर सकते हैं, लेकिन ध्यान रखें कि रूट खाते में ईश्वर के समान विशेषाधिकार हैं, जिसका अर्थ है कि यह किसी भी MySQL डेटाबेस में कोई भी ऑपरेशन कर सकता है और सावधानी बरत सकता है। खाते तक पहुँचने के लिए विशेषाधिकार किसे देना है, यह तय करते समय। साथ ही, ध्यान रखें कि अन्य MySQL खातों का उपयोग किस लिए किया जाता है।
MySQL में पासवर्ड प्रबंधन
MySQL पासवर्ड प्रबंधन सुविधाओं का भी समर्थन करता है। उनमें से कुछ में शामिल हैं:
- पासवर्ड को समय-समय पर समाप्त करने की क्षमता;
- पासवर्ड के दोबारा इस्तेमाल से बचने की क्षमता;
- पासवर्ड जेनरेट करने की क्षमता;
- यह जांचने की क्षमता है कि उपयोग में पासवर्ड मजबूत है या नहीं;
- कई असफल लॉगिन प्रयासों के बाद उपयोगकर्ताओं को अस्थायी रूप से लॉक करने की क्षमता।
अब, हम आगे इन विकल्पों पर गौर करेंगे।
पासवर्ड को मैन्युअल रूप से समाप्त करने के लिए, ALTER USER स्टेटमेंट का उपयोग इस प्रकार करें:
ALTER USER ‘user’@’localhost’ PASSWORD EXPIRE;
वैश्विक नीति सेट करने के लिए, my.cnf फ़ाइल को इस प्रकार संशोधित करें कि उसमें default_password_lifetime पैरामीटर शामिल हो। पैरामीटर को [mysqld] अनुभाग के नीचे परिभाषित किया जा सकता है (निम्न उदाहरण पासवर्ड जीवनकाल को 3 महीने (90 दिन) पर सेट करता है):
default_password_lifetime=90
यदि आप चाहते हैं कि पासवर्ड कभी समाप्त न हों, तो पैरामीटर default_password_litetime को 0 पर सेट करें।
आप विशिष्ट उपयोगकर्ताओं के लिए पासवर्ड समाप्ति भी सेट कर सकते हैं। यदि आप डेमो_यूसर नामक उपयोगकर्ता के लिए पासवर्ड समाप्ति का अंतराल सेट करना चाहते हैं, तो आप निम्न उदाहरण का उपयोग कर सकते हैं:
ALTER USER ‘demo_user’@’localhost’ PASSWORD EXPIRE INTERVAL 90 DAY;
पासवर्ड समाप्ति को अक्षम करने के लिए:
ALTER USER ‘demo_user’@’localhost’ PASSWORD EXPIRE NEVER;
वैश्विक पासवर्ड समाप्ति नीति को रीसेट करने के लिए:
ALTER USER ‘demo_user’@’localhost’ PASSWORD EXPIRE DEFAULT;
पासवर्ड पुन:उपयोग प्रतिबंध पासवर्ड के पुन:उपयोग की अनुमति नहीं देते हैं - इस सुविधा का उपयोग करने के लिए, password_history और password_reuse_interval चर का उपयोग करें। आप या तो नीचे दिए गए उदाहरण को देखकर इन चरों को my.cnf में डाल सकते हैं या नीचे दिए गए कथनों के सामने SET PERSIST जोड़कर उन्हें रनटाइम पर सेट कर सकते हैं।
पहले इस्तेमाल किए गए 355 दिनों से नए पासवर्ड में से किसी के भी दोबारा इस्तेमाल पर रोक लगाने के लिए, इसका इस्तेमाल करें:
password_history=5
password_reuse_interval=365
पुन:उपयोग की अनुमति देने से पहले कम से कम 5 पासवर्ड परिवर्तन की आवश्यकता के लिए:
ALTER USER ‘demo_user’@’localhost’ PASSWORD HISTORY 5;
उपयोगकर्ता बनाते समय भी ऐसा ही किया जा सकता है - ALTER USER को CREATE USER से बदलें।
उपयोगकर्ता बनाते समय एक यादृच्छिक पासवर्ड उत्पन्न करने के लिए, चलाएं:
CREATE USER [email protected] IDENTIFIED BY RANDOM PASSWORD;
किसी उपयोगकर्ता के पासवर्ड को यादृच्छिक रूप से जेनरेट किए गए पासवर्ड में बदलने के लिए:
SET PASSWORD FOR [email protected] TO RANDOM;
आपका यादृच्छिक पासवर्ड नीचे प्रदर्शित किया जाएगा।
ध्यान रखें कि डिफ़ॉल्ट रैंडम पासवर्ड की लंबाई 20 वर्णों की होती है। लंबाई को जेनरेट_रैंडम_पासवर्ड_लेंथ वैरिएबल द्वारा नियंत्रित किया जा सकता है जिसकी रेंज 5 से 255 तक होती है।
यह जांचने के लिए कि क्या उपयोग किया गया पासवर्ड मजबूत है, आप VALIDATE_PASSWORD_STRENGTH चर का उपयोग कर सकते हैं - फ़ंक्शन 0 से 100 तक की संख्या प्रदर्शित करता है जिसमें 0 सबसे कमजोर है और 100 सबसे मजबूत है:
VALIDATE_PASSWORD_STRENGTH ('पासवर्ड') चुनें;
MySQL में खाता लॉक करना
MySQL 8.0.19 ने उपयोगकर्ता खातों को अस्थायी रूप से लॉक करने की क्षमता भी पेश की। यह चर FAILED_LOGIN_ATTEMPTS और PASSWORD_LOCK_TIME का उपयोग करके पूरा किया जा सकता है।
उपयोगकर्ता बनाते समय खाता लॉकिंग सक्षम करने के लिए, चलाएं:
CREATE USER ‘demo_user’@’localhost’ IDENTIFIED BY ‘password’ FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 5;
FAILED_LOGIN_ATTEMPTS के बाद का मान निर्दिष्ट करता है कि कितने असफल प्रयासों के बाद खाता लॉक किया गया है, PASSWORD_LOCK_TIME के बाद का मान खाता लॉक समय को दिनों में निर्दिष्ट करता है। PASSWORD_LOCK_TIME को UNBOUNDED के रूप में निर्दिष्ट करके एक मान निर्दिष्ट करना भी संभव है जो खाता अनलॉक होने तक समाप्त नहीं होता है।
MySQL द्वारा प्रस्तुत सुरक्षा प्लगइन्स
MySQL कुछ प्लगइन्स भी प्रदान करता है जो सुरक्षा क्षमताओं को और बढ़ा सकते हैं। MySQL ऑफ़र करता है:
- प्रमाणीकरण प्लगइन्स;
- कनेक्शन-नियंत्रण प्लग इन;
- पासवर्ड सत्यापन प्लगइन्स;
- ऑडिट प्लग इन;
- फ़ायरवॉल प्लग इन;
इन प्लगइन्स का उपयोग सुरक्षा के लिहाज से कई चीजों के लिए किया जा सकता है:
प्रमाणीकरण प्लगइन्स
प्रमाणीकरण प्लगइन्स उपयोगकर्ताओं को MySQL में उपलब्ध कई प्लग करने योग्य प्रमाणीकरण विधियों के बीच चयन करने की अनुमति दे सकते हैं। इनका उपयोग CREATE USER या ALTER USER स्टेटमेंट के साथ किया जा सकता है। यहां एक उदाहरण दिया गया है:
CREATE USER ‘user_1’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’;
यह क्वेरी नेटिव पासवर्ड हैशिंग पद्धति का उपयोग करके प्रमाणीकरण लागू करेगी।
कनेक्शन-कंट्रोल प्लगइन्स
कनेक्शन-कंट्रोल प्लगइन्स कनेक्शन प्रयासों के लिए सर्वर प्रतिक्रियाओं में बढ़ती देरी का परिचय दे सकते हैं यदि कनेक्शन प्रयास एक निश्चित संख्या से अधिक हो - वे संभावित ब्रूट-फोर्स हमलों को रोकने में सक्षम हैं। यह प्लगइन लाइब्रेरी MySQL में संस्करण 5.7.17 में पेश की गई थी और इसे MySQL में my.cnf के माध्यम से या रनटाइम पर सर्वर में प्लग इन लोड करके जोड़ा जा सकता है।
my.cnf में प्लगइन्स जोड़ने के लिए , [mysqld] के नीचे निम्न पंक्ति जोड़ें:
plugin-load-add=connection_control.so
फ़ाइल को संशोधित करने के बाद, अपने परिवर्तनों को सहेजें और MySQL को पुनरारंभ करें।
रनटाइम पर सर्वर में प्लग इन लोड करने के लिए, चलाएं:
INSTALL PLUGIN CONNECTION_CONTROL SONAME ‘connection_control.so’;
INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME ‘connection_control.so’;
.so प्रत्यय को आवश्यकतानुसार समायोजित करें। यदि आपने सब कुछ सही ढंग से पूरा किया है, तो CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS तालिका में कनेक्ट करने के सभी विफल प्रयास शामिल होने चाहिए।
पासवर्ड सत्यापन प्लगइन्स
पासवर्ड सत्यापन प्लगइन्स उपयोगकर्ताओं को सही तरीके से उपयोग किए जाने पर मजबूत पासवर्ड का उपयोग करने की अनुमति दे सकते हैं। पासवर्ड सत्यापन प्लगइन my.cnf के माध्यम से या रनटाइम पर सर्वर में प्लगइन लोड करके स्थापित किया जा सकता है। my.cnf के माध्यम से प्लगइन स्थापित करने के लिए, [mysqld] के नीचे निम्न पंक्ति जोड़ें, फिर सर्वर को पुनरारंभ करें:
plugin-load-add=validate_password.so
रनटाइम पर प्लगइन लोड करने के लिए, निम्न कथन चलाएँ:
INSTALL PLUGIN validate_password SONAME ‘validate_password.so’;
रनटाइम पर प्लग इन लोड करने और इसे हटाए जाने से रोकने के लिए, my.cnf में मान्य-पासवर्ड=FORCE_PLUS_PERMANENT जोड़ें।
प्लग-इन प्रारंभ नहीं होने पर सर्वर को चलने से रोकने के लिए, --validate-password विकल्प का उपयोग FORCE या FORCE_PLUS_PERMANENT के मान के साथ करें।
पासवर्ड शक्ति नीति को भी बदला जा सकता है:ऐसा करने के लिए,Valid_password_policy मान को LOW, MEDIUM, या STRONG में बदलें। LOW का मान केवल पासवर्ड की लंबाई की जांच करता है, MEDIUM नीति कुछ शर्तों को जोड़ती है और STRONG नीति यह शर्त जोड़ती है कि पासवर्ड सबस्ट्रिंग जिसमें 4 या अधिक वर्ण होते हैं, वे एक शब्दकोश फ़ाइल में शब्दों से मेल नहीं खा सकते हैं जो कि validate_password_dictionary_file चर को संशोधित करके निर्दिष्ट किया जा सकता है।पी>
कीरिंग प्लगइन्स
कीरिंग प्लगइन्स सर्वर घटकों और प्लगइन्स को पुनर्प्राप्ति के लिए संवेदनशील जानकारी को सुरक्षित रूप से संग्रहीत करने में सक्षम कर सकते हैं। प्लगइन को MySQL में लोड करने के लिए, [mysqld] के नीचे निम्नलिखित जोड़ें:
early-plugin-load=keyring_file.so
कीरिंग वॉल्ट फ़ाइल निर्दिष्ट करने के लिए, निम्नलिखित जोड़ें (कीरिंग_वॉल्ट_कॉन्फ़िगरेशन वैरिएबल को कॉन्फ़िगरेशन फ़ाइल को इंगित करना चाहिए):
loose-keyring_vault_config=”/var/lib/mysql_keyring/keyring_vault.conf”
कीरिंग फ़ाइल में vault_url वैरिएबल होना चाहिए जो वॉल्ट सर्वर एड्रेस को परिभाषित करता है, सीक्रेट_माउंट_पॉइंट वैरिएबल जो माउंट पॉइंट नाम को परिभाषित करता है जहां कीरिंग वॉल्ट कीज़ को स्टोर करता है, और एक टोकन जो चाहिए वॉल्ट सर्वर द्वारा परिभाषित किया जा सकता है। वैकल्पिक रूप से, vault_ca वैरिएबल को भी परिभाषित किया जा सकता है (इसे वॉल्ट के प्रमाणपत्रों पर हस्ताक्षर करने के लिए उपयोग किए जाने वाले CA प्रमाणपत्र की ओर इशारा करना चाहिए)।
परिवर्तनों को प्रभावी करने के लिए सर्वर को पुनरारंभ करें;
ऑडिट प्लगइन्स
ऑडिट प्लगइन्स MySQL सर्वर पर की जाने वाली गतिविधि की निगरानी, लॉगिंग और ब्लॉकिंग को सक्षम कर सकते हैं। MySQL एंटरप्राइज़ ऑडिट स्थापित करने के लिए, अपने MySQL इंस्टेंस की शेयर निर्देशिका में स्थित एक स्क्रिप्ट चलाएं (टर्मिनल में अपना MySQL इंस्टेंस पासवर्ड डालने से बचें - my.cnf का उपयोग करें):
mysql < /path/to/audit_log_filter_linux_install.sql
आप रनटाइम के दौरान प्लगइन को हटाए जाने से भी रोक सकते हैं - [mysqld] अनुभाग में निम्नलिखित जोड़ें:
audit_log=FORCE_PLUS_PERMANENT
परिवर्तनों को लागू करने के लिए सर्वर को पुनरारंभ करें। ध्यान दें कि नियम-आधारित लॉगिंग डिफ़ॉल्ट रूप से कोई ऑडिट करने योग्य ईवेंट लॉग नहीं करता है, इसलिए इसे सब कुछ लॉग करने के लिए, एक फ़िल्टर बनाएं:
SELECT audit_log_filter_set_filter(‘log_filter’, ‘{ “filter”: { “log”: true } }’);
फिर इसे किसी खाते में असाइन करें:
SELECT audit_log_filter_set_user(‘%’, ‘log_filter’);
ध्यान दें कि ऑडिट प्लग इन केवल MySQL एंटरप्राइज़ संस्करण में उपलब्ध हैं;
फ़ायरवॉल प्लगइन्स
फ़ायरवॉल प्लगइन्स उपयोगकर्ताओं को विशिष्ट पैटर्न के आधार पर विशिष्ट SQL कथनों के निष्पादन की अनुमति देने या अस्वीकार करने में सक्षम कर सकते हैं। MySQL एंटरप्राइज़ फ़ायरवॉल को MySQL 5.6.24 में पेश किया गया था - यह अनधिकृत गतिविधि की निगरानी, चेतावनी और अवरुद्ध करके डेटा की सुरक्षा करने में सक्षम है:यह SQL इंजेक्शन हमलों को रोकने, खतरों की निगरानी करने और संदिग्ध ट्रैफ़िक को ब्लॉक करने के साथ-साथ घुसपैठ का पता लगाने में सक्षम है। डेटाबेस। फ़ायरवॉल अवरुद्ध बयानों को लॉग करने में भी सक्षम है - उनका निरीक्षण किया जा सकता है और स्वीकृत और अस्वीकृत बयानों की रीयल-टाइम गणना भी देखी जा सकती है।
MySQL एंटरप्राइज़ फ़ायरवॉल को स्थापित करने के लिए, इसे विंडोज़ पर MySQL सर्वर स्थापित करते समय बस इसे सक्षम करें, इसे MySQL वर्कबेंच 6.3.4 की मदद से स्थापित, अक्षम या अनइंस्टॉल भी किया जा सकता है। फ़ायरवॉल को आपके MySQL इंस्टॉलेशन की शेयर डायरेक्टरी में स्क्रिप्ट चलाकर मैन्युअल रूप से भी इंस्टॉल किया जा सकता है। फ़ायरवॉल को सक्षम करने के लिए, [mysqld] के नीचे निम्न पंक्ति जोड़ें और सर्वर को पुनरारंभ करें:
mysql_firewall_mode=ON
फ़ायरवॉल को रनटाइम पर भी सक्षम किया जा सकता है:
SET GLOBAL mysql_firewall_mode = ON;
वैकल्पिक रूप से, फ़ायरवॉल को बनाए रखने के लिए (जिसका अर्थ है कि प्रत्येक बाद के सर्वर के पुनरारंभ होने पर फ़ायरवॉल को फिर से सक्षम नहीं करना होगा):
SET PERSIST mysql_firewall_mode = ON;
फिर, किसी ऐसे खाते को FIREWALL_ADMIN विशेषाधिकार प्रदान करें जो फ़ायरवॉल का प्रबंधन करता है और किसी भी खाते को FIREWALL_USER विशेषाधिकार जिसकी केवल अपने फ़ायरवॉल नियमों तक पहुंच होनी चाहिए। साथ ही, mysql डेटाबेस में फ़ायरवॉल की संग्रहीत कार्यविधियों के लिए EXECUTE विशेषाधिकार प्रदान करें। फ़ायरवॉल के कार्य करने के लिए, इसके साथ प्रोफाइल पंजीकृत करें, फिर फ़ायरवॉल को अनुमत कथनों को जानने के लिए प्रशिक्षित करें जिन्हें डेटाबेस निष्पादित कर सकता है और बाद में सेट श्वेतसूची के विरुद्ध आने वाले कथनों से मिलान करने के लिए फ़ायरवॉल को बता सकता है। प्रत्येक प्रोफ़ाइल में एक परिचालन मोड होता है - बंद, रिकॉर्डिंग, सुरक्षा या पता लगाना। OFF प्रोफ़ाइल को अक्षम करता है, रिकॉर्डिंग फ़ायरवॉल को प्रशिक्षित करता है, प्रोटेक्टिंग स्टेटमेंट निष्पादन की अनुमति देता है या इनकार करता है और घुसपैठ के प्रयासों का पता लगाता है (लेकिन ब्लॉक नहीं करता है)। किसी निर्दिष्ट प्रोफ़ाइल के नियमों को उसके मान को रीसेट पर सेट करके रीसेट किया जा सकता है। OFF प्रोफ़ाइल को अक्षम कर देगा। मोड सेट करने के लिए, निम्न क्वेरी का उपयोग करें जहां नाम प्रोफ़ाइल नाम है और OFF परिचालन मोड है:
CALL mysql.sp_set_firewall_mode(name, ‘OFF’);
फ़ायरवॉल प्लग इन भी केवल MySQL एंटरप्राइज़ संस्करण में उपलब्ध है।
MySQL बैकअप सुरक्षित करना
जहां तक MySQL बैकअप का संबंध है, आपके पास कुछ विकल्प हैं।
- यदि आप mysqldump का उपयोग कर रहे हैं, तो आप my.cnf में अपना यूज़रनेम और पासवर्ड स्टोर कर सकते हैं और mysqldump को इस तरह इनवाइट कर सकते हैं (निम्न कमांड सभी डेटाबेस को एक फ़ाइल /home/backup.sql में डंप कर देगा):
$ mysqldump --defaults-extra-file=/var/lib/my.cnf --single-transaction --all-databases > /home/backup.sql
- अपने उपयोगकर्ता नाम और पासवर्ड को my.cnf के अंदर संग्रहीत करके, आप अपना पासवर्ड टर्मिनल के अंदर नहीं लिखते हैं - बैकअप लेने की ऐसी विधि अधिक सुरक्षित है क्योंकि जब डंप चल रहा होता है तो कमांड को ps ax के माध्यम से देखा जा सकता है। आदेश।
-
आप mysqldump-secure का उपयोग करने पर भी विचार कर सकते हैं जो एक पॉज़िक्स-संगत रैपर स्क्रिप्ट है जो मजबूत सुरक्षा को ध्यान में रखते हुए बैकअप को संपीड़ित और एन्क्रिप्ट करने में सक्षम है। ।
-
बैकअप को OpenSSL का उपयोग करके एन्क्रिप्ट किया जा सकता है - बस अपना बैकअप लें, फिर इसे निम्न कमांड से एन्क्रिप्ट करें:
$ openssl enc -aes-256-cbc -salt -in backup.tar.gz -out backup.tar.gz.enc -k password
उपरोक्त आदेश वर्तमान निर्देशिका में एक नई एन्क्रिप्टेड फ़ाइल backup.tar.gz.enc बनाएगा। फ़ाइल आपके द्वारा चुने गए पासवर्ड से एन्क्रिप्ट की जाएगी (पासवर्ड को अपने इच्छित पासवर्ड से बदलें)। फ़ाइल को बाद में निम्न आदेश चलाकर डिक्रिप्ट किया जा सकता है:
$ openssl aes-256-cbc -d -in backup.tar.gz.enc -out backup.tar.gz -k password
पासवर्ड को अपने पासवर्ड से बदलें।
-
mysqldump के पास आपके बैकअप को एन्क्रिप्ट करने का एक और विकल्प है (निम्न उदाहरण भी उन्हें gzip के साथ संपीड़ित करता है):
$ mysqldump --all-databases --single-transaction --triggers --routines | gzip | openssl enc -aes-256-cbc -k password > backup.xb.enc
पासवर्ड को अपने इच्छित पासवर्ड से बदलें।
-
आप मारियाबैकअप या एक्स्ट्राबैकअप का उपयोग करके अपने बैकअप को एन्क्रिप्ट भी कर सकते हैं। यहाँ MariaDB दस्तावेज़ीकरण का एक उदाहरण दिया गया है:
$ mariabackup --user=root --backup --stream=xbstream | openssl enc -aes-256-cbc -k password > backup.xb.enc
पासवर्ड को अपने इच्छित पासवर्ड से बदलें।
-
ClusterControl का उपयोग करके बैकअप भी एन्क्रिप्ट किया जा सकता है - यदि एन्क्रिप्शन विकल्प किसी विशेष बैकअप के लिए सक्षम है, तो ClusterControl AES-256 CBC का उपयोग करके बैकअप को एन्क्रिप्ट करेगा। (एन्क्रिप्शन बैकअप नोड पर होता है)। यदि बैकअप को नियंत्रक नोड पर संग्रहीत किया जाता है, तो बैकअप फ़ाइलों को एक एन्क्रिप्टेड प्रारूप में socat या netcat का उपयोग करके स्ट्रीम किया जाता है। यदि संपीड़न सक्षम है, तो ClusterControl पहले बैकअप को संपीड़ित करेगा, उसके बाद - इसे एन्क्रिप्ट करें। एन्क्रिप्शन कुंजी स्वचालित रूप से उत्पन्न हो जाएगी यदि यह मौजूद नहीं है, तो बैकअप_एन्क्रिप्शन_की विकल्प में CMON कॉन्फ़िगरेशन के अंदर संग्रहीत किया जाएगा। ध्यान रखें कि यह कुंजी एन्कोडेड है और इसे पहले डिकोड किया जाना चाहिए। ऐसा करने के लिए, निम्न आदेश चलाएँ:
$ cat /etc/cmon.d/cmon_ClusterID.cnf | grep ^backup_encryption_key | cut -d"'" -f2 | base64 -d > keyfile.key
कमांड बैकअप_एन्क्रिप्शन_की को पढ़ेगा और इसके मान को बाइनरी आउटपुट में डिकोड करेगा। कीफाइल का उपयोग बैकअप को इस प्रकार डिक्रिप्ट करने के लिए किया जा सकता है:
$ cat backup.aes256 | openssl enc -d -aes-256-cbc -pass file:/path/to/keyfile.key > backup_file.xbstream.gz
अधिक उदाहरणों के लिए, ClusterControl दस्तावेज़ देखें।
निष्कर्ष
MySQL सुरक्षा के बारे में इन पोस्टों में हमने कुछ सुरक्षा उपायों को शामिल किया है जो आपके MySQL इंस्टेंस की सुरक्षा को कड़ा करने की आवश्यकता महसूस होने पर अच्छे उपयोग के हो सकते हैं। जबकि हमने पूरी तरह से सब कुछ कवर नहीं किया, हमें लगता है कि ये बिंदु आपके MySQL इंस्टॉलेशन की सुरक्षा को मजबूत करते समय एक अच्छा प्रारंभिक बिंदु हो सकते हैं। इन पदों से आप क्या करेंगे, अपना स्वयं का शोध करें, और अपनी स्थिति में सबसे अधिक लागू होने वाले सुरक्षा उपायों को लागू करें।