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

अपने मारियाडीबी डेटा को एन्क्रिप्ट करने के विभिन्न तरीकों की खोज करना

अपने मारियाडीबी डेटाबेस को एन्क्रिप्ट करना, चाहे वह इन-ट्रांजिट और आराम से हो, सबसे महत्वपूर्ण चीजों में से एक है जिस पर एक संगठन को विचार करना चाहिए यदि आप अपने डेटा को महत्व देते हैं।

वित्तीय लेनदेन, मेडिकल रिकॉर्ड, गोपनीय जानकारी, या यहां तक ​​कि व्यक्तिगत डेटा से निपटने वाले संगठनों को इस प्रकार की डेटा सुरक्षा की आवश्यकता होनी चाहिए। मूल रूप से, डेटाबेस एन्क्रिप्शन आपके पठनीय डेटा को किसी भी अनधिकृत उपयोगकर्ता द्वारा अपठनीय (या कम से कम डिक्रिप्ट करने के लिए कठिन) प्रारूप में बदल देगा।

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

संबंधित संसाधन अपने MySQL और MariaDB बैकअप को कैसे एन्क्रिप्ट करें डेटाबेस सुरक्षा - बैकअप एन्क्रिप्शन इन-ट्रांजिट और एट-रेस्ट अपडेट किया गया:क्लस्टर कंट्रोल डीबीए बनें - ट्रांजिट में MySQL डेटा का एसएसएल कुंजी प्रबंधन और एन्क्रिप्शन

इस ब्लॉग में, हम आपके मारियाडीबी डेटा को एन्क्रिप्ट करने के विभिन्न तरीकों पर चर्चा करेंगे, चाहे वह आराम से हो या पारगमन में। हम आपको एन्क्रिप्शन की एक बुनियादी समझ प्रदान करेंगे और इसका उपयोग कैसे करें ताकि आप अपने डेटा को सुरक्षित रखने के लिए इन तरीकों का उपयोग कर सकें।

MariaDB डेटा एन्क्रिप्ट करना:इन-ट्रांजिट

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

इन हमलों से बचने के लिए, मारियाडीबी आपको ट्रांसपोर्ट लेयर सिक्योरिटी (टीएलएस) प्रोटोकॉल (जिसे पहले सिक्योर सॉकेट लेयर या एसएसएल के रूप में जाना जाता था) का उपयोग करके सर्वर और क्लाइंट के बीच डेटा इन-ट्रांजिट एन्क्रिप्ट करने की अनुमति देता है। शुरू करने के लिए, आपको यह सुनिश्चित करना होगा कि आपका मारियाडीबी सर्वर टीएलएस समर्थन के साथ संकलित किया गया था। जैसा कि नीचे दिखाया गया है, आप SHOW GLOBAL VARIABLES स्टेटमेंट चलाकर इसे सत्यापित कर सकते हैं:

MariaDB [(none)]> 'version_ssl_library' की तरह ग्लोबल वेरिएबल दिखाएं;+---------------------+------ ---------------------------+| चर_नाम | मूल्य |+---------------------+-------------------------- --------+| वर्जन_एसएसएल_लाइब्रेरी | ओपनएसएसएल 1.0.1ई-फिप्स 11 फरवरी 2013 |+---------------------+--------------------- ----------------+1 पंक्ति में सेट (0.001 सेकंड) 

आप भ्रमित हो सकते हैं कि एसएसएल और टीएसएल कैसे भिन्न होते हैं। प्रलेखन एसएसएल शब्द का उपयोग कर सकता है और कॉन्फ़िगरेशन के लिए चर ssl_* को उपसर्ग के रूप में भी उपयोग करता है, हालांकि, मारियाडीबी केवल अपने सुरक्षित उत्तराधिकारियों का समर्थन करता है और पुराने एसएसएल संस्करणों का नहीं। आपको मारियाडीबी के सही संस्करणों को पहचानना और उनका उपयोग करना पड़ सकता है जिसके लिए आपको उपयोग करने के लिए आवश्यक टीएलएस संस्करणों के सही समर्थन की आवश्यकता होती है। उदाहरण के लिए, PCI DSS v3.2 TLSv1.2 के न्यूनतम प्रोटोकॉल संस्करण का उपयोग करने की अनुशंसा करता है जो कि MariaDB के पुराने संस्करणों का समर्थन करता है। हालांकि, टीएलएस 1.3 के साथ, ओपनएसएसएल 1.1.1 की आवश्यकता है, संचार करने वाली दो प्रणालियों के बीच अधिक कुशल हैंडशेक के कारण तेज है और यह मारियाडीबी 10.2.16 और मारियाडीबी 10.3.8 के बाद से समर्थित है।

किसी विशिष्ट TLS संस्करण के लिए उपलब्ध सिफर का उपयोग करने के लिए, आप इसे --ssl-cipher का उपयोग करके परिभाषित कर सकते हैं mysqld . में कमांड या एसएसएल-सिफर कॉन्फ़िगरेशन फ़ाइल में चर। ध्यान दें कि OpenSSL का उपयोग करते समय TLSv1.3 सिफर को बाहर नहीं किया जा सकता है, यहां तक ​​कि ssl_cipher सिस्टम वैरिएबल का उपयोग करके भी।

डेटा इन-ट्रांज़िट एन्क्रिप्ट करने के लिए कॉन्फ़िगरेशन पैरामीटर

पारगमन में अपने डेटा को एन्क्रिप्ट करने के लिए, आप नीचे सूचीबद्ध आदेशों का क्रम कर सकते हैं:

CA प्रमाणपत्र जेनरेट करें

openssl genrsa 2048> ca-key.pemopenssl req -new -x509 -nodes -days 365000 -subj "/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN =सीए सर्वर" -कुंजी ca-key.pem -आउट ca-cert.pem 

सर्वर प्रमाणपत्र जेनरेट करें

खुलता है req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem -subj "/C=PH/ST=Davao Del Sur/L=Davao City /O=Maximus Aleksandre/CN=DB सर्वर" ओपनएसएल आरएसए -इन सर्वर-की.पेम -आउट सर्वर-की.पेमोपेन्सएसएल x509 -रेक -इन सर्वर-रेक.पेम -दिन 365000 -सीए सीए-सर्ट.पेम -सीएकी सीए -key.pem -set_serial 01 -out server-cert.pem 

क्लाइंट प्रमाणपत्र जेनरेट करें

खुलता है अनुरोध -न्यूकी आरएसए:2048 -दिन 365000 -नोड्स -कीआउट क्लाइंट-की.पेम -आउट क्लाइंट-req.pem -subj "/C=PH/ST=Davao Del Sur/L=Davao City /O=Maximus Aleksandre/CN=Client Server"openssl rsa -in client-key.pem -out client-key.pemopenssl x509 -req -in client-req.pem -days 365000 -CA ca-cert.pem -CAkey ca -key.pem -set_serial 01 -आउट क्लाइंट-सर्टिफिकेट.पेम 

ध्यान दें कि -subj . में आपका सामान्य नाम (CN) तर्क आपके सीए, सर्वर और आपके द्वारा उत्पन्न क्लाइंट प्रमाणपत्रों के विरुद्ध अद्वितीय होना चाहिए। तकनीकी रूप से, सीए और सर्वर में एक ही सीएन हो सकता है लेकिन इन तीनों के लिए इसे विशिष्ट पहचानकर्ता बनाना सबसे अच्छा है। अन्यथा, आपको एक त्रुटि इस प्रकार प्राप्त होगी:

ERROR 2026 (HY000):SSL कनेक्शन त्रुटि:tlsv1 अलर्ट अज्ञात सीए 

ठीक है, प्रमाणपत्र और चाबियां जगह पर हैं। आपको अपनी MySQL कॉन्फ़िगरेशन फ़ाइल में ssl_* चर का उपयोग करके पथ निर्दिष्ट करने की आवश्यकता है (उदाहरण के लिए /etc/my.cnf RHEL-आधारित OS के लिए या /etc/mysql/my.cnf डेबियन/उबंटू OS के लिए)। नीचे दिए गए उदाहरण कॉन्फिगर को देखें:

[msqld]...ssl_ca=/etc/ssl/galera/self-gen/ca-cert.pemssl_cert=/etc/ssl/galera/self-gen/server-cert.pemssl_key=/etc /ssl/galera/self-gen/server-key.pem 

बेशक, आपको सही पथ निर्दिष्ट करना होगा जहाँ आपने अपना प्रमाणपत्र और कुंजियाँ रखी हैं।

फिर इन मापदंडों को [client-mariadb] . के अंतर्गत रखें आपकी कॉन्फ़िगरेशन फ़ाइल का अनुभाग इस प्रकार नीचे दिया गया है:

[client-mariadb]ssl_ca =/etc/ssl/galera/self-gen/ca-cert.pemssl_cert=/etc/ssl/galera/self-gen/client-cert.pemssl_key=/etc/ ssl/galera/self-gen/client-key.pem 

जैसा कि पहले उल्लेख किया गया है, आप निर्दिष्ट कर सकते हैं कि आपका एसएसएल/टीएलएस कॉन्फ़िगरेशन किस प्रकार के सिफर का उपयोग कर सकता है। यह नीचे दिए गए कॉन्फ़िगरेशन सेटअप को निर्दिष्ट करके किया जा सकता है:

[mysqld]…ssl_ca=/etc/ssl/galera/self-gen/ca-cert.pemssl_cert=/etc/ssl/galera/self-gen/server-cert.pemssl_key=/etc/ssl /galera/self-gen/server-key.pemssl-cipher=AES256-GCM-SHA384 

या आप निम्न कॉन्फ़िगरेशन का उपयोग नीचे के रूप में कर सकते हैं:

ssl-cipher=TLSv1.2 ### यह TLS में उपलब्ध सभी सिफर का उपयोग करेगा v1.2ssl-cipher=HIGH:!DSS:!RCA-SHA:!DES-CBC3-SHA:example@sqldat .com ### उपलब्ध मजबूत सिफर को सूचीबद्ध करेगा और उपसर्ग में सिफर को बाहर करेगा। 

अंतिम पंक्ति इस कमांड के समतुल्य को दर्शाती है:

openssl ciphers -v 'high:!DSS:!RCA-SHA:!DES-CBC3-SHA:[email protected]' 

यह कमजोर सिफर और उन सिफर को बाहर कर देगा जो उपसर्ग रूप में हैं जैसे DHE-DSS-AES256-GCM-SHA384 उदाहरण के लिए सिफर।

ClusterControl का उपयोग करके अपना प्रमाणपत्र बनाना

वैकल्पिक रूप से, आप अपने लिए प्रमाणपत्र और कुंजी जेनरेट करने के लिए ClusterControl का उपयोग कर सकते हैं। ऐसा करने के लिए, आप निम्न कार्य कर सकते हैं जैसा कि नीचे देखा गया है:

  1. अपना मारियाडीबी क्लस्टर चुनें, फिर सुरक्षा . पर जाएं टैब और एसएसएल एन्क्रिप्शन का चयन करें। नीचे मेरे उदाहरण में, यह एक मारियाडीबी गैलेरा क्लस्टर है:
  2. एसएसएल एन्क्रिप्शन का चयन करें और इसे सक्षम करें। आप एक नया प्रमाणपत्र बना सकेंगे या कोई मौजूदा प्रमाणपत्र चुन सकेंगे. इस नमूने के लिए, मैं "प्रमाणपत्र बनाएँ" विकल्प चुनूँगा:
  3. अंतिम चरण आपके प्रमाणपत्र के लिए समाप्ति के दिनों को कॉन्फ़िगर करना है। नीचे देखें: यदि आप "रीस्टार्ट नोड्स" पर क्लिक करते हैं, तो ClusterControl एक रोलिंग रीस्टार्ट करेगा। ध्यान दें, यदि आप मारियाडीबी 10.4 (जो वर्तमान में इसके आरसी संस्करण पर है) का उपयोग कर रहे हैं तो आप अपने मारियाडीबी सर्वर को पुनरारंभ किए बिना एसएसएल का उपयोग कर सकते हैं। बस फ्लश एसएसएल कमांड का उपयोग करें जो मारियाडीबी 10.4 संस्करण में जोड़ा गया एक नया फीचर है।

अपने टीएलएस/एसएसएल प्रमाणपत्र/कुंजी को संभालने का दूसरा तरीका, आप कुंजी प्रबंधन का भी उपयोग कर सकते हैं क्लस्टर नियंत्रण के तहत। यह कैसे करना है इसके बारे में अधिक जानने के लिए इस ब्लॉग को देखें।

अपना TLS/SSL MariaDB उपयोगकर्ता बनाएं

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

ऐसा करने के लिए, बस निम्न उदाहरण करें:

MariaDB [(none)]> USER बनाएं [email protected]'192.168.10.200' '[email protected]' से पहचाना गया;क्वेरी ठीक, 0 पंक्तियाँ प्रभावित (0.005 सेकंड) 
MariaDB [(none)]> ग्रांट ऑल ऑन *.* TO [email protected]'192.168.10.200' SSL की आवश्यकता है;क्वेरी ओके, 0 पंक्तियाँ प्रभावित (0.005 सेकंड) 

सुनिश्चित करें कि अपने क्लाइंट/एप्लिकेशन होस्ट से कनेक्ट होने पर, पिछले चरणों के आधार पर आपके द्वारा जेनरेट किए गए प्रमाणपत्र को कॉपी करें।

अपना कनेक्शन सत्यापित करना

अपने कनेक्शन का परीक्षण करना कि यह एन्क्रिप्ट किया गया है या नहीं, स्थिति निर्धारित करने के लिए बहुत महत्वपूर्ण है। ऐसा करने के लिए, आप नीचे निम्न आदेश कर सकते हैं:

mysql -e "status"|grep -i 'cipher'SSL:उपयोग में आने वाला सिफर DHE-RSA-AES256-GCM-SHA384 है 

वैकल्पिक रूप से, OpenSSL संस्करण 1.1.1 ने -starttls mysql . के लिए समर्थन जोड़ा . एक उपलब्ध सांख्यिकीय रूप से संकलित ओपनएसएल बाइनरी है जिसे आप यहां प्राप्त कर सकते हैं https://testssl.sh/openssl-1.0.2k-dev-chacha.pm.ipv6.Linux+FreeBSD.tar.gz (या पीडीएफ प्रारूप में इस प्रस्तुति को चेकआउट करें) . फिर आप नीचे निम्न आदेश कर सकते हैं:

इको | bin/openssl.Linux.x86_64.static s_client -starttls mysql -connect localhost:3306 -CAfile /etc/ssl/galera/self-gen/ca-cert.pem 

उदाहरण परिणाम नीचे जैसा होगा:

$ इको | bin/openssl.Linux.x86_64.static s_client -starttls mysql -connect localhost:3306 -CAfile /etc/ssl/galera/self-gen/ca-cert.pem CONNECTED(00000003) गहराई =1 C =PH, ST =Davao डेल सुर, एल =दावो सिटी, ओ =मैक्सिमस अलेक्जेंड्रे, सीएन =सीए सर्वर रिटर्न सत्यापित करें:1 गहराई =0 सी =पीएच, एसटी =दावो डेल सुर, एल =दावो सिटी, ओ =मैक्सिमस एलेक्जेंड्रे, सीएन =डीबी सर्वर रिटर्न सत्यापित करें:1- - प्रमाणपत्र श्रृंखला 0 एस:/सी=पीएच/एसटी=दावाओ डेल सुर/एल=दावाओ शहर/ओ=मैक्सिमस अलेक्सांद्रे/सीएन=डीबी सर्वर i:/सी=पीएच/एसटी=दावाओ डेल सुर/एल=दावाओ शहर/ ओ =मैक्सिमस अलेक्सांद्रे/सीएन =सीए सर्वर 1 एस:/सी=पीएच/एसटी=दावाओ डेल सुर/एल=दावाओ सिटी/ओ=मैक्सिमस अलेक्जेंड्रे/सीएन=सीए सर्वर i:/सी=पीएच/एसटी=दावाओ डेल सुर/ L=Davao City/O=Maximus Aleksandre/CN=CA Server---Server certificate-----BEGIN CERTIFICATE-----MIIDTDCCAjQCAQEwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCUEgxFjAUBgNVBAgMDURhdmFvIERlbCBTdXIxEzARBgNVBAcMCkRhdmFvIENpdHkxGzAZBgNVBAoMEk1heGltdXMgQWxla3NhbmRyZTESMBAGA1UEAwwJQ0EgU2VydmVyMCAXDTE5MDYxMDAyMTMwNFoYDzMwMTgxMDExMDIxMzA0WjBrMQswCQYDVQQGEwJQSDEWMBQGA1UECAwNRGF2YW8gRGVsIFN1cjETM BEGA1UEBwwKRGF2YW8gQ2l0eTEbMBkGA1UECgwSTWF4aW11cyBBbGVrc2FuZHJlMRIwEAYDVQQDDAlEQiBTZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNwFuoqJg8YlrDinxDZN4+JjFUTGlDfhmy9H/1C4fZToegvd3RzU9mz3/Fgyuoez4szHDgkn7o4rqmKAH6tMm9R44qtBNGlxkafn12PPXudDvij4A9C3nVatBJJXTSvSD4/eySY33kAS1DpKsgsTgKAKOsyadcvXYUIP5nfFc7pxX/8qZADVmyeik4M+oLxO6ryurt0wmUhOmlz5zQghh9kFZLA49l+p95m5D53d/O+Qj4HSb2ssZD2ZaRc2k4dMCVpa87xUbdP/VVLeu0J4BE3OJiwC0N1JfiZpP2DOKljsklaAYQF+tPnWi5pgReEd47/ql0fNEjeheF/MJiJM1NAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAAz7yB+UdNYJ1O5zJI4Eb9lL+vNVKhRJ8IfNrwKVbpATeQk9Xpn9bidfcd2gseqDTyixZhWjsjO2LXix7jRhH1DrJvhGQ7+1w36ujtzscTgyydLH90CnE/oZHArbBhmyuqmu041w5rB3PpI9i9SveezDrbVcaL+qeGo8s4ATB2YrY3T3OTqw6o/7cTJJ8S1aXBLTyUq5HAtOTM2GGZMSYwVqUsmBHA3d7M8i7yp20RVH78j1H6+/hSSY4SDhwr04pSkzmm6HTIBCgOYrmEV2sQ/YeMHqVrSplLRY3SZHvqHogbSnasOQAE1oJnSNyxt9CRRAghM/EHEnsA2OlFa9iXQ=---- -अंत प्रमाणपत्र-----विषय=/सी=पीएच/एसटी=दावाओ डेल सुर/एल=दावाओ शहर/ओ=मैक्सिमस अलेक्सांद्रे/सीएन=डीबी सर्वर जारीकर्ता=/सी=पीएच/एसटी=दावाओ डेल सुर/एल=दावाओ शहर/ओ=मा ximus Aleksandre/CN=CA सर्वर --- कोई क्लाइंट प्रमाणपत्र नहीं CA नाम भेजा गया क्लाइंट प्रमाणपत्र प्रकार:RSA फिक्स्ड DH, DSS फिक्स्ड DH, RSA साइन, DSA साइन, ECDSA साइनअनुरोधित हस्ताक्षर एल्गोरिदम:RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1साझा अनुरोधित हस्ताक्षर एल्गोरिदम :RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA +SHA1:DSA+SHA1:ECDSA+SHA1पीयर साइनिंग डाइजेस्ट:SHA512Server Temp Key:DH, 2048 बिट्स ---SSL हैंडशेक ने 3036 बाइट्स पढ़े हैं और 756 बाइट्स लिखे हैं---नया, TLSv1/SSLv3, सिफर DHE-RSA-AES256 है -जीसीएम-एसएचए384सर्वर सार्वजनिक कुंजी 2048 बिट है सुरक्षित पुनर्निगोशिएशन आईएस समर्थित हैसंपीड़न:कोई नहींविस्तार:कोई नहींएएलपीएन पर बातचीत नहींएसएसएल-सत्र:प्रोटोकॉल:टीएलएसवी1.2 सिफर:डीएचई-आरएसए-एईएस256-जीसीएम-एसएचए384 सत्र-आईडी:46ई011186एफए42779डीबी210बी90737921ए सत्र-ID-ctx:मास्टर-कुंजी:2A2E6137929E733051BE060953049A0553F49C2F50A183EEC0C40F7EFB4E2749E611DF54A88417518A274EC904FB3CE6 कुंजी-आर्ग:कोई नहीं PSK पहचान:कोई नहीं PSK:300 (दूसरा टिकट:कोई नहीं) b7 9e cb-77 58 b9 75 53 34 5c 61 J.......wX.uS4\a 0010 - 3a 4d 0e aa e2 6b 27 8e-11 ff 24 विज्ञापन 66 88 49:M...k '....$.f.I 0020 - c1 ba 20 20 d8 9f d5 5c-23 9d 64 dc 97 f2 fa 77 .. ...\#.d....w 0030 - bf e6 26 1f 2c 98 ee 3b-71 66 0c 04 05 3e 54 c1 ..&.,...;qf...>T. 0040 - 88 b6 f7 a9 fd b8 f9 84-cd b8 99 9f 6e 50 3b 13 .........nP;. 0050 - 90 30 91 7d 48 ea 11 f7-3f b7 6b 65 2e ea 7e 61 .0.}H...?.ke..~a 0060 - 70 cd 4e b8 43 54 3d a0-aa dc e5 44 a7 41 3a 5e p.N.CT=....D.A:^ 0070 - 3e cb 45 57 33 2b a4 8f-75 d8 ce a5 9e 00 16 50>.EW3+..u......P 0080 - 24 aa 7a 54 f8 26 65 74-11 d7 f3 d6 66 3b 14 60 $.zT.&et....f;.` 0090 - 33 98 4a ef e2 17 ba 33-4e 7f 2b ce 46 d7 e9 11 3.J. ...3N.+.F... प्रारंभ समय:1560133350 समयबाह्य:300 (सेकंड) वापसी कोड सत्यापित करें:0 (ठीक)--हो गया 
आपके संपूर्ण डेटाबेस इन्फ्रास्ट्रक्चर के लिए ClusterControlSingle कंसोल पता करें कि ClusterControl में और क्या नया है, ClusterControl को निःशुल्क स्थापित करें

MariaDB डेटा एन्क्रिप्ट करना:आराम से

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

एन्क्रिप्शन एट-रेस्ट एक अतिरिक्त सुरक्षा है, लेकिन यह एक अच्छे फ़ायरवॉल, मजबूत पासवर्ड, सही उपयोगकर्ता अनुमतियों और क्लाइंट और सर्वर के बीच इन-ट्रांजिट एन्क्रिप्शन का प्रतिस्थापन नहीं है।

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

एक बार जब आप MariaDB में डेटा-एट-रेस्ट एन्क्रिप्शन को सक्षम कर लेते हैं, तो ENCRYPTED=YES या innodb_encrypt_tables=ON के साथ परिभाषित तालिकाओं में आपका संग्रहीत डेटा एन्क्रिप्टेड होगा। इसे केवल तभी डिक्रिप्ट किया जाता है जब मारियाडीबी के डेटाबेस के माध्यम से एक्सेस किया जाता है, अन्यथा, डेटा अपठनीय है।

उदाहरण के लिए, अनएन्क्रिप्टेड डेटा को पढ़ना, यह आपको इस तरह दिखाएगा:

$strings admin_logs.ibd|head -10=r7Ninfimumsupremuminfimumsupremum/failआपके द्वारा दर्ज किया गया सत्यापन कोड गलत है।KKelmo1234failआपके द्वारा दर्ज किया गया पासवर्ड या उपयोगकर्ता नाम अमान्य हैKKelmo1234failआपके द्वारा दर्ज किया गया पासवर्ड या उपयोगकर्ता नाम अमान्य हैKKelmoasfdfail आपके द्वारा दर्ज किया गया सत्यापन कोड गलत है। आपके द्वारा दर्ज किया गया कोड गलत है। केके 

लेकिन एन्क्रिप्टेड डेटा के साथ, आपका टेबलस्पेस नीचे दिए गए उदाहरण की तरह पढ़ने योग्य नहीं होगा:

# स्ट्रिंग्स user_logs.ibd |head -10E?*Pa[+YQKNmbUtQT_lPAW\GbQ.] e2#RsdywY%okdUY{]~GE 

यह भी उल्लेखनीय है कि मारियाडीबी का डेटा-एट-रेस्ट एन्क्रिप्शन लगभग 3-5% का डेटा आकार ओवरहेड जोड़ता है। XtraDB और InnoDB स्टोरेज इंजन का उपयोग करते समय मारियाडीबी एन्क्रिप्शन भी पूरी तरह से समर्थित है। एन्क्रिप्शन भी एरिया स्टोरेज इंजन के लिए समर्थित है, लेकिन केवल ROW_FORMAT=PAGE (डिफ़ॉल्ट) और बाइनरी लॉग (प्रतिकृति लॉग) के साथ बनाई गई तालिकाओं के लिए। मारियाडीबी उपयोगकर्ता को लचीले ढंग से एन्क्रिप्ट करने की अनुमति भी देता है। XtraDB या InnoDB में, कोई एन्क्रिप्ट करना चुन सकता है:

  • सब कुछ — सभी टेबल स्पेस (सभी टेबल के साथ)
  • व्यक्तिगत टेबल
  • सब कुछ, अलग-अलग तालिकाओं को छोड़कर

इसके अतिरिक्त, कोई व्यक्ति XtraDB/InnoDB लॉग फ़ाइलों को एन्क्रिप्ट करना चुन सकता है (जिसकी अनुशंसा की जाती है)।

मारियाडीबी की अपनी सीमाएं हैं। उदाहरण के लिए, गैलेरा क्लस्टर gcache एन्क्रिप्टेड नहीं है, लेकिन इसे मारियाडीबी 10.4 संस्करण के हिस्से के रूप में नियोजित किया गया है। आप यहां सीमाओं की पूरी सूची पा सकते हैं।

डेटा-एट-रेस्ट एन्क्रिप्शन के लिए MariaDB को कैसे सेटअप और कॉन्फ़िगर करें

  1. openssl rand कमांड का उपयोग करके एक यादृच्छिक एन्क्रिप्शन कुंजी उत्पन्न करें।
    $ mkdir -p /etc/mysql/encryption$ for i {1..5}; opensl rand -hex 32>> /etc/mysql/encryption/keyfile; हो गया; 
    अब, फ़ाइल खोलें और संपादित करें /etc/mysql/encryption/keyfile और कुंजी आईडी जोड़ें, जो एन्क्रिप्टेड टेबल बनाते समय यह संदर्भ होगा क्योंकि यह एन्क्रिप्शन कुंजी आईडी है। अधिक विवरण के लिए ENCRYPTION_KEY_ID देखें। इसलिए, निम्न प्रारूप इस प्रकार होना चाहिए:
    ;; 
    In my example keyfile, this looks as the following:
    $ cat keyfile1;687a90b4423c10417f2483726a5901007571c16331d2ee9534333fef4e3230752;e7bf20f1cbde9632587c2996871cff74871890d19b49e273d13def123d781e173;9284c9c80da9a323b3ac2c82427942dfbf1718b57255cc0bc0e2c3d6f15ac3ac4;abf80c3a8b10643ef53a43c759227304bcffa263700a94a996810b0f0459a5805;bdbc5f67d34a4904c4adc9771420ac2ab2bd9c6af1ec532e960335e831f02933 
  2. आइए चरण 1 से समान कमांड का उपयोग करके एक यादृच्छिक पासवर्ड बनाएं या बनाएं:
    $ openssl rand -hex 128> /etc/mysql/encryption/keyfile.key 
  3. अगले चरण पर आगे बढ़ने से पहले, कुंजी फ़ाइल को एन्क्रिप्ट करने के बारे में निम्नलिखित विवरणों पर ध्यान देना महत्वपूर्ण है:
    • मारियाडीबी वर्तमान में कुंजी फ़ाइल को एन्क्रिप्ट करने के लिए जिस एकमात्र एल्गोरिदम का समर्थन करता है, वह उन्नत एन्क्रिप्शन स्टैंडर्ड (एईएस) का सिफर ब्लॉक चेनिंग (सीबीसी) मोड है।
    • एन्क्रिप्शन कुंजी का आकार 128-बिट, 192-बिट या 256-बिट हो सकता है।
    • एन्क्रिप्शन कुंजी एन्क्रिप्शन पासवर्ड के SHA-1 हैश से बनाई गई है।
    • एन्क्रिप्शन पासवर्ड की अधिकतम लंबाई 256 वर्ण है।
    अब, Opensl enc कमांड का उपयोग करके कुंजी फ़ाइल को एन्क्रिप्ट करने के लिए, नीचे निम्न कमांड चलाएँ:-in /etc/mysql/encryption/keyfile -out /etc/mysql/encryption/keyfile.enc
  4. अपनी MySQL कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित चर जोड़ें (अर्थात /etc/my.cnf RHEL-आधारित Linux OS पर या /etc/mysql/my.cnf डेबियन/उबंटू Linux आधारित OS में)
    [ mysqld]…################### डेटाबेस एन्क्रिप्शन ###################### #####plugin_load_add =file_key_managementfile_key_management_filename =/etc/mysql/encryption/keyfile.encfile_key_management_filekey =FILE:/etc/mysql/encryption/keyfile.keyfile_key_management_encryption_algorithm =aes_cbc encrypt_binlog =1innodb_encrypt_tables =ONinnodb_encrypt_log =ONinnodb_encryption_threads =4innodb_encryption_rotate_key_age =0 # Do not rotate key  
  5. MariaDB सर्वर को अभी पुनरारंभ करें
    $ systemctl start mariadb 

एन्क्रिप्शन को सत्यापित और परीक्षण करें

एन्क्रिप्शन को सत्यापित और परीक्षण करने के लिए, बस एक नमूना तालिका बनाएं। उदाहरण के लिए, नीचे दिए गए SQL कथनों को करके तालिका बनाएं:

MariaDB [test]> CREATE TABLE a (i int) ENGINE=InnoDB ENCRYPTED=YES;क्वेरी ओके, 0 पंक्तियाँ प्रभावित (0.018 सेकंड) 
MariaDB [test]> CREATE TABLE b (i int) ENGINE=InnoDB;क्वेरी ओके, 0 पंक्तियाँ प्रभावित (0.003 सेकंड) 

फिर, आइए तालिकाओं में कुछ डेटा जोड़ें:

MariaDB [test]> मान में डालें(1),(2);क्वेरी ठीक है, 2 पंक्तियां प्रभावित (0.001 सेकंड)रिकॉर्ड:2 डुप्लीकेट:0 चेतावनियां:0 
MariaDB [test]> b मानों में सम्मिलित करें(1),(2);क्वेरी ठीक है, 2 पंक्तियाँ प्रभावित (0.001 सेकंड)रिकॉर्ड:2 डुप्लीकेट:0 चेतावनियाँ:0 

यह जांचने और देखने के लिए कि कौन-सी तालिकाएं एन्क्रिप्ट की गई हैं, बस निम्नलिखित चुनें को चलाएं नीचे क्वेरी:

  मारियाडीबी [टेस्ट]> चुनें * से info_schema.innodb_tablespaces_encryption\G**************************** 1. पंक्ति * ************* स्पेस:4 नाम:mysql/gtid_slave_pos ENCRYPTION_SCHEME:1 KEYSERVER_REQUESTS:1 MIN_KEY_VERSION:1 CURRENT_KEY_VERSION:1 KEY_ROTATION_PAGE_NUMBER:NULLKEY_ROTATION_MAX_PAGE_NUMBER:NULL CURRENT_KEY_ID:1 ROTATING_OR_FLUSHING:0**************************** 2. पंक्ति ************* ************** स्पेस:2 नाम:mysql/innodb_index_stats ENCRYPTION_SCHEME:1 KEYSERVER_REQUESTS:1 MIN_KEY_VERSION:1 CURRENT_KEY_VERSION:1 KEY_ROTATION_PAGE_NUMBER:0 NULLKEY_ROTATION_BER_MAX_FLOTHING:********** 3. पंक्ति ************ ** अंतरिक्ष:1 नाम:mysql/innodb_table_stats ENCRYPTION_SCHEME:1 KEYSERVER_REQUESTS:1 MIN_KEY_VERSION:1 CURRENT_KEY_VERSION:1 KEY_ROTATION_PAGE_NUMBER:NULLKEY_ROTATION_ORMAX_PAGE_NUMBER:** NULL:1 ROT_KEY_ING_ID:***** 4. पंक्ति ************ स्थान:3 नाम:mysql/transaction_registry ENCRYPTION_SCHEME:1 KEYSERVER_REQUESTS:0 MIN_KEY_VERSION :1 CURRENT_KEY_VERSION:1 KEY_ROTATION_PAGE_NUMBER:NULLKEY_ROTATION_MAX_PAGE_NUMBER:NULL CURRENT_KEY_ID:1 ROTATING_OR_FLUSHING:0************************** 5. पंक्ति **** *********************** स्थान:5 नाम:परीक्षण/एक ENCRYPTION_SCHEME:1 KEYSERVER_REQUESTS:1 MIN_KEY_VERSION:1 CURRENT_KEY_VERSION:1 KEY_ROTATION_PAGE_NUMBER:NULLKEY_ROTATION_MAX_PAG E_NUMBER:NULL CURRENT_KEY_ID:1 ROTATING_OR_FLUSHING:0**************************** 6. पंक्ति *********** **************** स्पेस:6 नाम:परीक्षण/बी ENCRYPTION_SCHEME:1 KEYSERVER_REQUESTS:1 MIN_KEY_VERSION:1 CURRENT_KEY_VERSION:1 KEY_ROTATION_PAGE_NUMBER:NULLKEY_ROTATION_ORMAX_PAGE_NUMBER:सेट में NULL CURRENT_KEY_ID:(0.000 सेकंड) 

InnoDB तालिका बनाने के लिए ENCRYPTED=YES कीवर्ड निर्दिष्ट करने की आवश्यकता नहीं है। जैसा कि हमने कॉन्फ़िगरेशन फ़ाइल में innodb_encrypt_tables =ON रखने के लिए निर्दिष्ट किया है, यह स्वचालित रूप से बनाया गया है।

यदि आप उपयोग की जाने वाली तालिका की एन्क्रिप्शन आईडी निर्दिष्ट करना चाहते हैं, तो आप निम्न कार्य भी कर सकते हैं:

MariaDB [test]> CREATE TABLE c (i int) ENGINE=InnoDB ENCRYPTION_KEY_ID =4;क्वेरी ठीक, 0 पंक्तियाँ प्रभावित (0.003 सेकंड) 

ENCRYPTION_KEY_ID एन्क्रिप्शन कीफाइल से लिया गया था जिसे हमने पहले जेनरेट किया था।

इसके अतिरिक्त, यदि आप शेल के माध्यम से अधिक परीक्षण चाहते हैं, तो आप स्ट्रिंग्स . का उपयोग कर सकते हैं आदेश मैंने आपको पहले दिखाया था।

MariaDB एन्क्रिप्शन पर अतिरिक्त जानकारी

यदि आपके मारियाडीबी इंस्टेंस में कोई अनएन्क्रिप्टेड टेबल नहीं होनी चाहिए, तो बस [mysqld] के भीतर अपनी my.cnf कॉन्फ़िगरेशन फ़ाइल में वेरिएबल सेट करें। अनुभाग इस प्रकार है:

innodb_encrypt_tables =FORCE. 

बिनलॉग एन्क्रिप्शन के लिए, बस निम्नलिखित जोड़ें

encrypt_binlog =1 

InnoDB का रीडो-लॉग डिफ़ॉल्ट रूप से एन्क्रिप्ट नहीं किया गया है। इसे एन्क्रिप्ट करने के लिए [mysqld] सेक्शन के बाद नीचे वेरिएबल जोड़ें,

innodb-encrypt-log 

यदि आपको अपने ऑन-डिस्क अस्थायी तालिकाओं और अस्थायी फ़ाइलों के लिए एन्क्रिप्शन की आवश्यकता है, तो आप निम्नलिखित जोड़ सकते हैं:

encrypt-tmp-disk-tables=1encrypt-tmp-files=1 

  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. मारियाडीबी में DAYOFYEAR () कैसे काम करता है

  3. Amazon RDS (MySQL या MariaDB) को ऑन-प्रेम सर्वर पर माइग्रेट करना

  4. मारियाडीबी स्कीमा () समझाया गया

  5. एक हाइब्रिड क्लाउड में तैनात गैलेरा क्लस्टर के लिए आपदा वसूली