Whats एक mysql डेटाबेस को एन्क्रिप्ट करने का एक अच्छा तरीका है, और क्या यह इसके लायक है?


20

मुझे पता है कि मैं किसी डेटाबेस के विशेष क्षेत्रों को एन्क्रिप्ट कर सकता हूं, लेकिन मुझे डेटाबेस के हर क्षेत्र को एन्क्रिप्ट करने में दिलचस्पी है। मैं यह सुनिश्चित करना चाहता हूं कि कोई भी व्यक्ति जो mysql शेल तक पहुंच प्राप्त कर सकता है, लेकिन जिनके पास डिक्रिप्शन कुंजी तक पहुंच नहीं है, वे डेटाबेस से बाहर कुछ भी नहीं पढ़ सकते हैं।

मैं यह भी सुनिश्चित करना चाहता हूं कि अगर किसी को मशीन तक रूट पहुंच गया, लेकिन उसके पास डिक्रिप्शन कुंजी नहीं है, तो वे डेटा नहीं पढ़ सकते हैं।

मुझे यह कैसे करना चाहिए? क्या यह करने के लिए समझ में आता है? मुझे चिंता है कि अगर किसी के पास mysql डेटाबेस तक पहुंच है, तो उनके पास अनिवार्य रूप से कुंजी तक पहुंच होगी, इसलिए इसका कोई मतलब नहीं है। क्या मैं कुछ भूल रहा हूँ?


5
क्या आपने एक समर्पित वॉल्यूम पर DB को संग्रहीत करने और इसे dm-crypt और LUKS के साथ एन्क्रिप्ट करने पर विचार किया है? ज़रूर, यह वह नहीं है जो आप पूछ रहे हैं, लेकिन सब कुछ एन्क्रिप्ट किया जाएगा। तुम भी GPG के साथ keyfile एन्क्रिप्ट कर सकते हैं।
dsljanus

जवाबों:


10

न्यूनतम, फ़ील्ड-स्तर एईएस और डीईएस एन्क्रिप्शन उपलब्ध है: https://dev.mysql.com/doc/refman/5.5/en/enc एन्क्रिप्शन-functions.html#function_encrypt

कोई भी प्रत्येक क्वेरी के लिए कुंजी निर्दिष्ट किए बिना डेटा को नहीं पढ़ सकता है (या इसे ट्रिगर / प्रक्रियाओं में जोड़े बिना)।

उदाहरण:

दर्ज करें:

INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));

और चयन करें:

SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';

साथ ही, इसके लिए डेटाबेस से SSL कनेक्शन की आवश्यकता होती है।

और निचले स्तर पर - आप फ़ाइल सिस्टम को भी एन्क्रिप्ट कर सकते हैं।


2
नोट: जब तक डेटाबेस स्थानीय न हो, आपको किसी तरह कनेक्शन को एन्क्रिप्ट करने की आवश्यकता होती है या पासवर्ड और कुंजी को नेटवर्क पर सादे पाठ के रूप में भेजा जाएगा। सुरक्षा
।stackexchange.com/questions/45838/…

एईएस, एमडी 5 पुराना है और इसके कारनामे हैं। नया एनक्रिप्शन क्या है?
युयुम्यम

मुझे पता है कि यह केवल एक क्षेत्र को एन्क्रिप्ट / डिक्रिप्ट करने के तरीके का एक उदाहरण है लेकिन एक उदाहरण के रूप में पासवर्ड का उपयोग करना एक बुरा विचार है। एन्क्रिप्शन के साथ या उसके बिना आपके डेटाबेस में कभी भी अनहैश पासवर्ड नहीं होना चाहिए।
केडमन

यह उत्तर फ़ील्ड-स्तरीय डिक्रिप्शन के बारे में है, फिर भी यह सवाल इस बारे में नहीं है: "mysql डेटाबेस को एन्क्रिप्ट करने का एक अच्छा तरीका" ... "मुझे पता है कि मैं किसी डेटाबेस के विशेष क्षेत्रों को एन्क्रिप्ट कर सकता हूं, लेकिन मुझे हर एन्क्रिप्ट करने में दिलचस्पी है डेटाबेस का क्षेत्र। "
लार्स

7

MariaDB ने हाल ही में InnoDB और XtraDB तालिकाओं के लिए तालिका-स्तरीय एन्क्रिप्शन जोड़ा है। https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#specifying-what-tables-to-encrypt

MySQL भी InnoDB के लिए टेबल-स्तर एन्क्रिप्शन का समर्थन करता है। https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html


2

पहला: आप एप्लिकेशन के साथ अपनी कुंजी संग्रहीत करते हैं और एप्लिकेशन परत पर सभी एन्क्रिप्शन को संभालते हैं।

अगला: आप यह सुनिश्चित करते हैं कि MySQL उदाहरण और एप्लिकेशन [सर्वर] अलग मशीनों पर हैं ताकि MySQL सर्वर पर एक रूट समझौता हमलावर को एप्लिकेशन स्रोत से कुंजी को पढ़ने की अनुमति न दे।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.