Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कैसे सुनिश्चित करें कि आपका MySQL डेटाबेस सुरक्षित है

शुरू करने से पहले कुछ बुनियादी जानकारी:

स्रोत:इंटरनेट सुरक्षा केंद्र (सीआईएस) Oracle MySQL कम्युनिटी सर्वर 5.7

ऑपरेटिंग सिस्टम: विंडोज 10

कहां निष्पादित करें: कमांड लाइन

mysql -u USERNAME -p

लक्षित अनुप्रयोग: Oracle MySQL कम्युनिटी सर्वर 5.7

सूचना प्रणालियों के लिए ऑडिटिंग और लॉगिंग

संदिग्ध साइबर हमले होने पर लॉग सुरक्षा के लिए महत्वपूर्ण भूमिका निभाते हैं। सुरक्षा कर्मियों के लिए लॉग की मैन्युअल समीक्षा श्रमसाध्य है, और उन्हें जानकारी निकालने और उसका विश्लेषण करने के लिए लॉग समीक्षा टूल का उपयोग करना चाहिए। लॉग को भ्रष्टाचार से बचने और लॉग डेटा खोने से बचने के लिए WORM (एक बार कई पढ़ने के लिए लिखें) स्टोरेज तकनीक और एन्क्रिप्शन का उपयोग करना चाहिए। साथ ही, लॉग में रखरखाव, पहुंच और तुलना में आसानी के लिए एक मानकीकृत प्रारूप होना चाहिए।

सुनिश्चित करें कि "log_error" खाली नहीं है

आदेश:

SHOW variables LIKE ‘log_error’;

त्रुटि लॉग में घटनाओं पर डेटा होता है जब mysqld प्रारंभ या बंद हो जाता है। यह यह भी दिखाता है कि कब किसी तालिका का मूल्यांकन या मरम्मत करने की आवश्यकता है। यह एक "मूल्य" उत्पन्न करना चाहिए। त्रुटि लॉगिंग को सक्षम करने का कारण यह है कि यह MySQL और अन्य महत्वपूर्ण संदेशों के विरुद्ध दुर्भावनापूर्ण प्रयासों का पता लगाने की क्षमता को बढ़ाने में मदद करता है।

सुनिश्चित करें कि लॉग फ़ाइलें गैर-सिस्टम विभाजन पर संग्रहीत हैं

आदेश:

SELECT @@global.log_bin_basename;

MySQL की लॉग फाइल को फाइल सिस्टम में कहीं भी स्टोर किया जा सकता है और MySQL कॉन्फ़िगरेशन का उपयोग करके सेट किया जा सकता है। साथ ही, यह सुनिश्चित करना सबसे अच्छा अभ्यास है कि फाइल सिस्टम में लॉग अन्य लॉग जैसे एप्लिकेशन लॉग के साथ अव्यवस्थित नहीं हैं। आपको यह सुनिश्चित करना चाहिए कि लौटाया गया मान यह नहीं दर्शाता है कि यह रूट "('/')", "/ var", या "/ usr" में है। इसका कारण यह है कि यदि ऑपरेटिंग सिस्टम के लिए उपलब्ध डिस्क स्थान समाप्त हो जाता है, तो विभाजन सेवा से वंचित होने की संभावना को कम कर देगा।

सुनिश्चित करें कि "log_error_verbosity" "1" पर सेट नहीं है

आदेश:

SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;

यह जाँच अतिरिक्त जानकारी प्रदान करती है कि MySQL लॉग में कौन-सी कार्यक्षमताएँ हैं या त्रुटि संदेशों पर सक्षम हैं। 1 का मान त्रुटि संदेशों की लॉगिंग को सक्षम करता है। 2 का मान त्रुटि और चेतावनी संदेशों की लॉगिंग दोनों को सक्षम बनाता है। 3 का मान त्रुटि, चेतावनी और नोट संदेशों की लॉगिंग को सक्षम करता है। यह संचार त्रुटियों और निरस्त कनेक्शनों को लॉग करके दुर्भावनापूर्ण व्यवहार का पता लगाने में मदद करता है।

सुनिश्चित करें कि ऑडिट लॉगिंग सक्षम है

इंटरैक्टिव उपयोगकर्ता सत्रों और एप्लिकेशन सत्रों के लिए उत्पादन परिवेश के लिए ऑडिट लॉगिंग को सक्षम करना महत्वपूर्ण है। ऑडिट लॉगिंग के साथ, यह यह पहचानने में मदद करता है कि किसने क्या और कब बदला। यह यह पहचानने में भी मदद कर सकता है कि किसी हमलावर ने क्या किया है और इसे जांच में सबूत के तौर पर भी इस्तेमाल किया जा सकता है।

आदेश:

SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;

आदेश:

SET GLOBAL general_log = ‘ON’ ;

आदेश: उपयोगकर्ता 'user1' @ 'लोकलहोस्ट' पासवर्ड से पहचाने जाने वाले 'नॉट-सो-सीक्रेट' बनाएं;

विंडोज 10 में लॉग का पथ सेवा एप्लिकेशन का उपयोग करके पाया जा सकता है, यह देखने के लिए कि क्या MySQL चल रहा है, और गुणों पर राइट-क्लिक करें।

लेखक के सिस्टम में लॉग स्थित था:C:\ProgramData\MySQL\MySQL Server 5.7\Data\DJ-JASON-CLARK.log

सूचना प्रणाली के लिए प्रमाणीकरण

प्रमाणीकरण सुनिश्चित करता है कि उपयोगकर्ता या मशीन द्वारा प्रदान किए गए प्रमाण-पत्र स्थानीय ऑपरेटिंग सिस्टम या प्रमाणीकरण सर्वर में अधिकृत उपयोगकर्ताओं के डेटाबेस से मेल खाते हैं। प्रमाणीकरण के बाद प्राधिकरण द्वारा पीछा किया जाता है, जो एक व्यवस्थापक द्वारा उपयोगकर्ताओं या मशीनों को प्रदान किया जाता है। एक प्रमाणीकरण जो आमतौर पर निजी और सार्वजनिक दोनों नेटवर्कों में उपयोग किया जाता है, वह पासवर्ड-आधारित प्रमाणीकरण है।

सुनिश्चित करें कि पासवर्ड वैश्विक कॉन्फ़िगरेशन में संग्रहीत नहीं हैं

एक MySQL कॉन्फ़िगरेशन फ़ाइल का [क्लाइंट] अनुभाग उपयोगकर्ता और पासवर्ड को सेट करने की अनुमति देता है। जांच महत्वपूर्ण है क्योंकि कॉन्फ़िगरेशन फ़ाइल में उपयोगकर्ता और पासवर्ड को अनुमति देने से उपयोगकर्ता के पासवर्ड की गोपनीयता नकारात्मक रूप से प्रभावित होती है।

ऑडिट करने के लिए, MySQL कॉन्फ़िगरेशन फ़ाइल खोलें और [क्लाइंट] अनुभाग की जांच करें - इसमें कोई पासवर्ड संग्रहीत नहीं होना चाहिए। लेखक के सिस्टम में कोई पासवर्ड सेट नहीं किया गया था (नीचे चित्र देखें)। यदि कॉन्फ़िगरेशन फ़ाइल में पासवर्ड सेट किया गया था, तो पासवर्ड को .mylogin.cnf में एन्क्रिप्टेड रूप में संग्रहीत करने के लिए mysql_config_editor का उपयोग करें।

सुनिश्चित करें कि 'sql_mode' में 'NO_AUTO_CREATE_USER' शामिल है

"no_auto_create_user" प्रमाणीकरण जानकारी प्रदान नहीं किए जाने पर उपयोगकर्ता के स्वतः निर्माण को रोकने का एक विकल्प है।

आदेश:

SELECT @@global.sql_mode;

आदेश:

SELECT @@session.sql_mode;

सुनिश्चित करें कि सभी MySQL खातों के लिए पासवर्ड सेट हैं

एक उपयोगकर्ता एक खाली पासवर्ड बना सकता है। खाली पासवर्ड रखना जोखिम भरा है क्योंकि कोई भी उपयोगकर्ता की पहचान मान सकता है, उपयोगकर्ता का लॉगिन आईडी दर्ज कर सकता है और सर्वर से जुड़ सकता है। यह प्रमाणीकरण को दरकिनार कर देता है, जो खराब है।

आदेश:

SELECT User,host FROM mysql.user WHERE authentication_string=’’;

सुनिश्चित करें कि 'default_password_lifetime' '90' से कम या उसके बराबर है

पासवर्ड के जीवनकाल को 90 दिनों में बदलने से हमलावर के लिए पासवर्ड से समझौता करने के लिए उपलब्ध समय कम हो जाता है, और इस तरह हमला होने की संभावना कम हो जाती है।

आदेश:

SHOW VARIABLES LIKE ‘default_password_lifetime’;

आदेश:

SET GLOBAL default_password_lifetime=90;

सुनिश्चित करें कि पासवर्ड जटिलता मौजूद है

पासवर्ड जटिलता प्रमाणीकरण में सुरक्षा शक्ति जोड़ती है और इसमें लंबाई, केस, संख्या और विशेष वर्ण जोड़ना या बढ़ाना शामिल है। पासवर्ड जितना जटिल होगा, पासवर्ड प्राप्त करने के लिए हमलावरों के लिए क्रूर बल का उपयोग करना उतना ही कठिन होगा। पासवर्ड डिक्शनरी में कमजोर पासवर्ड आसानी से मिल जाते हैं।

आदेश:

SHOW VARIABLES LIKE ‘validate_password%’;

सुनिश्चित करें कि किसी भी उपयोगकर्ता के पास वाइल्डकार्ड होस्टनाम नहीं हैं

वाइल्डकार्ड होस्टनाम (%) वाले उपयोगकर्ताओं को किसी भी स्थान की अनुमति दी जाती है। वाइल्डकार्ड होस्टनाम बनाने से बचना सबसे अच्छा है। इसके बजाय, उपयोगकर्ता बनाएँ और उन्हें विशिष्ट स्थान दें जहाँ से कोई दिया गया उपयोगकर्ता डेटाबेस से जुड़ सकता है और उसके साथ सहभागिता कर सकता है।

आदेश:

SELECT user, host FROM mysql.user WHERE host = ‘%’;

सुनिश्चित करें कि कोई अनाम खाता मौजूद नहीं है

उपयोगकर्ता के पास एक अनाम (खाली या खाली) उपयोगकर्ता नाम हो सकता है। इन अनाम उपयोगकर्ता नामों में कोई पासवर्ड नहीं है और कोई अन्य उपयोगकर्ता उस अनाम उपयोगकर्ता नाम का उपयोग MySQL सर्वर से कनेक्ट करने के लिए कर सकता है। इन अनाम खातों को हटाना सुनिश्चित करता है कि केवल पहचाने गए और विश्वसनीय उपयोगकर्ता ही MySQL सर्वर तक पहुँच सकते हैं।

आदेश:

SELECT user,host FROM mysql.user WHERE user = ‘’;

MySQL सर्वर से नेटवर्क कनेक्शन

नेटवर्क कनेक्शन उपयोगकर्ता और MySQL सर्वर के बीच संचार के लिए एक महत्वपूर्ण भूमिका निभाता है। असुरक्षित नेटवर्क कनेक्शन हमलों के प्रति बहुत संवेदनशील होते हैं। नेटवर्क कनेक्शन सुरक्षा के लिए निम्नलिखित जाँचें हैं।

सुनिश्चित करें कि 'have_ssl' 'YES' पर सेट है

आपके सिस्टम के अंदर आने वाले दुर्भावनापूर्ण हमलावरों से बचने के लिए, अविश्वसनीय नेटवर्क का उपयोग करते समय सभी नेटवर्क ट्रैफ़िक के लिए SLL/TLS का उपयोग करना सबसे अच्छा है।

आदेश:

WHERE variable_name = ‘have_ssl’;

सुनिश्चित करें कि 'ssl_type' 'ANY', 'X509' पर सेट है, या सभी दूरस्थ उपयोगकर्ताओं के लिए 'निर्दिष्ट'

एसएसएल/टीएलएस प्रति उपयोगकर्ता कॉन्फ़िगर किया जाना चाहिए। यह आगे दुर्भावनापूर्ण हमलावरों को सुनने से रोकता है।

आदेश:

SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);

प्रतिकृति

प्रतिकृति स्थिति की जांच करने से आप प्रदर्शन और सुरक्षा कमजोरियों की निगरानी कर सकते हैं। Microsoft SQL सर्वर प्रबंधन स्टूडियो में प्रतिकृति की निगरानी के लिए निम्नलिखित उपकरण हैं:

  1. स्नैपशॉट एजेंट की स्थिति देखें,
  2. लॉग रीडर एजेंट की स्थिति देखें, और
  3. सिंक्रनाइज़ेशन स्थिति देखें।

सुनिश्चित करें कि प्रतिकृति यातायात सुरक्षित है

प्रतिकृति सर्वर के बीच यातायात सुरक्षित होना चाहिए। प्रतिकृति स्थानांतरण के दौरान, पासवर्ड लीक हो सकते हैं।

ऑडिट करने के लिए, जांचें कि क्या वे उपयोग कर रहे हैं:एक निजी नेटवर्क, एक वीपीएन, एसएसएल / टीएलएस या एक एसएसएच सुरंग। उम्मीद है कि लेखक की प्रणाली एक निजी नेटवर्क का उपयोग कर रही है। अन्यथा ठीक करें, और निजी नेटवर्क, वीपीएन, एसएसएल/टीएलएस या एसएसएच टनल का उपयोग करके सुरक्षित करें।

सुनिश्चित करें कि 'MASTER_SSL_VERIFY_SERVER_CERT' 'YES' या '1' पर सेट है

'MASTER_SSL_VERIFY_SERVER_CERT' जांचता है कि प्रतिकृति को प्राथमिक के प्रमाणपत्र को सत्यापित करना चाहिए या नहीं। कनेक्शन जारी रखने से पहले प्रतिकृति को प्राथमिक प्रमाण पत्र को प्रमाणित करने के लिए प्राथमिक प्रमाण पत्र को सत्यापित करना चाहिए।

आदेश:

SELECT ssl_verify_server_cert FROM mysql.slave_master_info;

सुनिश्चित करें कि 'master_info_repository' को 'TABLE' पर सेट किया गया है

'Master_info_repository' यह निर्धारित करता है कि प्रतिकृति प्राथमिक की स्थिति और कनेक्शन जानकारी को कहाँ लॉग करती है। पासवर्ड प्राथमिक सूचना भंडार में संग्रहीत किया जाता है जो एक सादा पाठ फ़ाइल है। पासवर्ड को TABLE Master_info में संग्रहीत करना अधिक सुरक्षित है।

आदेश:

SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;

सुनिश्चित करें कि 'super_priv' प्रतिकृति उपयोगकर्ताओं के लिए 'Y' पर सेट नहीं है

"Mysql.user" तालिका में स्थित "सुपर" विशेषाधिकार ('super_priv') में "CHANGE", "MASTER TO", "KILL", "mysqladmin Kill", "PURGE BINARY LOGS", "SET GLOBAL" जैसे कार्य हैं। "mysqladmin डीबग", और अन्य लॉगिंग नियंत्रण। उपयोगकर्ता को "सुपर" विशेषाधिकार देने से उपयोगकर्ता वर्तमान में निष्पादित SQL कथनों को देखने और समाप्त करने की अनुमति देता है, यहां तक ​​कि पासवर्ड प्रबंधन के लिए भी। अगर हमलावर "सुपर" विशेषाधिकार का फायदा उठाता है और हासिल करता है, तो वे लॉगिंग डेटा को अक्षम, बदल या नष्ट कर सकते हैं।

आदेश:

SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;

सुनिश्चित करें कि कोई प्रतिकृति उपयोगकर्ताओं के पास वाइल्डकार्ड होस्टनाम नहीं हैं

MySQL आपको वाइल्डकार्ड होस्टनाम को अनुमति देने की अनुमति देता है। वाइल्डकार्ड होस्टनाम से बचना चाहिए, और आपको उपयोगकर्ताओं को बनाना या संशोधित करना चाहिए और उन्हें विशिष्ट स्थान देना चाहिए जहां से एक दिया गया उपयोगकर्ता डेटाबेस से जुड़ सकता है और इंटरैक्ट कर सकता है।

निष्कर्ष

एप्लिकेशन-साइड और यूजर-साइड दोनों पर सूचना प्रणाली के रूप में MySQL का उपयोग करके एकल कार्य वातावरण के लिए निम्नलिखित जांच की जाती है।

MySQL के मानक लॉगिंग और अतिरिक्त लॉगिंग कार्यों को सक्षम करने के लिए मूल्यांकन अनिवार्य है (यह प्रमाणीकरण कमजोरियों की जांच करने में भी सक्षम बनाता है)। अन्य उपयोगकर्ताओं को आपके नेटवर्क में देखने से दुर्भावनापूर्ण इरादे से रोकने के लिए नेटवर्क जांच महत्वपूर्ण है। एन्क्रिप्ट करने के लिए हमेशा एसएसएल/टीएलएस लागू करें। वन-वे ट्रांसफर को सुरक्षित करना आवश्यक है। प्रतिकृति ट्रैफ़िक को सुरक्षित करना एक रक्षात्मक परत जोड़ता है।

मूल्यांकन का परिणाम आपको सूचित कर सकता है कि क्या सिस्टम भरोसे के स्तर पर काम करने में सक्षम है।

मेरे ब्लॉग को पढ़ने के लिए आपको धन्यवाद! आपने अब अपने MySQL डेटाबेस को सुरक्षित करने का मार्ग शुरू कर दिया है।=)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL वर्कबेंच का उपयोग करके एक नया डेटाबेस आरेख कैसे बनाएं

  2. MySQL सीखें - नई प्रौद्योगिकी सप्ताह

  3. MySQL में एक स्ट्रिंग को आज तक कैसे परिवर्तित करें?

  4. MySQL तालिका से अद्वितीय बाधा छोड़ना

  5. PDO::__construct ():सर्वर ने क्लाइंट को अज्ञात चारसेट (255) भेजा। कृपया, डेवलपर्स को रिपोर्ट करें