azure SQL सर्वर 2016 में हमेशा एन्क्रिप्टेड व्यवहार




sql-server-2016 always-encrypted (2)

मैं SQL सर्वर 2016 में कुछ डेमो कर रहा था विषय के लिए हमेशा एन्क्रिप्ट किया गया कुछ संदेह मिला नीचे दिए गए कदम हैं:

डेटाबेस सर्वर में (माइक्रोसॉफ्ट Azure VM में होस्ट):

  1. तालिका में MyTable , कॉलम एन्क्रिप्शन कुंजी (सीईके) और मास्टर एन्क्रिप्शन कुंजी (सीएमके) बनाया गया
  2. Select * from MyTable , एन्क्रिप्टेड डेटा दिखाता है। (ऐप और डीबी सर्वर से)
  3. डेटाबेस सर्वर से प्रमाणपत्र निर्यात किया गया
  4. एप्लिकेशन सर्वर में प्रमाणपत्र आयात किया गया (मेरी स्थानीय मशीन)
  5. जोड़ा गया Column Encryption Setting=Enabled मेरे आवेदन की कनेक्शन स्ट्रिंग में Column Encryption Setting=Enabled
  6. यह ठीक काम कर रहा है, अब यह अपेक्षाकृत सादे पाठ डेटा दिखाता है

शक:

डेटाबेस सर्वर (एमएस एज़्यूर वीएम में), यदि एक SysAdmin लॉगिन (एसक्यूएल प्रमाणीकरण) अतिरिक्त पैरामीटर Column Encryption Setting=Enabled साथ एसएसएमएस से जोड़ता है, यह सादा पाठ डेटा (एनक्रिप्टेड डेटा की उम्मीद) दिखाता है। मेरी समझ है, कोई और नहीं तो आवेदन उपयोगकर्ताओं को सादे पाठ डेटा देखना चाहिए )। किसी को भी स्पष्ट कर सकते हैं?


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

यदि एक SysAdmin लॉगिन (एसक्यूएल प्रमाणीकरण) अतिरिक्त पैरामीटर कॉलम एन्क्रिप्शन सेटिंग = सक्षम के साथ एसएसएमएस से जोड़ता है, यह सादा पाठ डेटा (एनक्रिप्टेड डेटा की उम्मीद) दिखाता है। मेरी समझ है, कोई और नहीं तो आवेदन उपयोगकर्ताओं को सादे पाठ डेटा देखना चाहिए)। किसी को भी स्पष्ट कर सकते हैं?

यदि SysAdmin क्लाइंट मशीन से SSMS से कनेक्ट हो रहा है जिसमें प्रमाण पत्र है और यदि SysAdmin को प्रमाणपत्र का उपयोग करने की अनुमति है, तो वे सादे टेक्स्ट डेटा देखेंगे।

मोटे तौर पर, हमेशा एन्क्रिप्ट किए गए निम्नलिखित सुरक्षा गारंटी प्रदान करता है, प्लेनटेक्स्ट डेटा केवल ऐसी संस्थाओं के लिए दृश्यमान होगा जो कॉलममस्टरकी (सर्टिफिकेट)

विस्तृत करने के लिए, निम्न परिदृश्य पर विचार करें।

दो मशीनों पर विचार करें:

  • MachineA : जिस मशीन पर SQL सर्वर चल रहा है
  • MachineT : ग्राहक मशीन

दो उपयोगकर्ताओं पर विचार करें

  • UserA (यह तकनीकी रूप से उपयोगकर्ताओं का एक समूह हो सकता है, लेकिन मैं सादगी के लिए एकल उपयोगकर्ता के साथ एक परिदृश्य पर विचार करूँगा): मशीन ए पर एक प्रशासक कौन है, एसक्यूएल सर्वर के प्रबंधन और SQL सर्वर पर SysAdmin है। हालांकि, UserA के पास किसी भी प्रकार की मशीनट और यूज़रएयर की मशीन ए (एन्क्रिप्टेड डेटा पर SQL सर्वर में संग्रहीत किसी भी एन्क्रिप्टेड डेटा को डिक्रिप्ट करने में सक्षम नहीं होना चाहिए, इस जवाब के संदर्भ में वह डेटा है जो हमेशा एनक्रिप्टेड फीचर का उपयोग करके एन्क्रिप्ट किया गया है एस क्यू एल सर्वर)।

  • UserT (यह तकनीकी रूप से उपयोगकर्ताओं का एक समूह हो सकता है, लेकिन मैं सादगी के लिए एकल उपयोगकर्ता के साथ एक परिदृश्य पर विचार करूँगा): क्या एक विश्वसनीय उपयोगकर्ता, मशीनट तक पहुंच है, को डेटाबेस डीबी में सभी डेटा तक पहुंच है जो कि SQL सर्वर पर होस्ट है मशीनए इसके अलावा, चूंकि UserT विश्वसनीय है, इसलिए वह एन्क्रिप्टेड डेटा को डिक्रिप्ट करने में सक्षम होना चाहिए।

MachineA पर चल रहे SQL सर्वर पर विचार करें डेटाबेस डीबी और तालिका टी है

हमारा लक्ष्य तालिका तालिका से संबंधित एक स्तंभ को सुरक्षित करना है, एसएसएनसीओएल कहते हैं, कि केवल यूजर टी एसएसएनसीएल को सादे टेक्स्ट में देखने में सक्षम होना चाहिए।

ऊपर वर्णित लक्ष्य निम्न चरणों का उपयोग करके प्राप्त किया जा सकता है।

  • UserT लॉग में MachineT
  • UserT MachineT में SSMS खोलता है
  • UserT MachineA पर SQL सर्वर से कनेक्ट करता है
  • UserT Encrypt columns (configure Always Encrypted) में दिए गए चरणों का उपयोग करके तालिका टी में ssnCol encrypts इस आलेख के खंड
  • इस चरण के बाद, कॉलम एसएसएनसीओएल को एन्क्रिप्ट किया जाएगा।

जब userT एसएसएनसीएल को ऊपर वर्णित तरीके से एन्क्रिप्ट करता है, तो दो कुंजी उत्पन्न होती हैं

  • सीएमके : सीएमके उर्फ ​​कॉलम मास्टर चाबी कुंजी है जिसे सीईके / एस को एन्क्रिप्ट करने के लिए उपयोग किया जाता है। यह कुंजी मशीनट के विंडोज़ प्रमाणपत्र स्टोर में संग्रहीत है
  • सीईके : सीईके उर्फ ​​कॉलम एन्क्रिप्शन कुंजी कुंजी है जो एसएसएनसीॉल को एन्क्रिप्ट करने के लिए उपयोग की जाती है , इस कुंजी को एन्क्रिप्टेड रूप में मशीनए पर SQL सर्वर में संग्रहित किया जाता है और सादे टेक्स्ट में कहीं भी कायम नहीं है।

इसलिए, एसएसएनसील को डिक्रिप्ट करने के लिए, सीईके को डिक्रिप्ट करने के लिए सीईसी की आवश्यकता है, सीएमके आवश्यक है।

चूंकि सीएमके मशीनट के विंडोज प्रमाणपत्र स्टोर में है, केवल यूजर टी सीएमके तक पहुंच सकता है, सीईके को डिक्रिप्ट करता है और एसएसएनसीॉल को डिक्रिप्ट करता है

UserA मशीन पर एक व्यवस्थापक है और एसक्यूएल सर्वर पर एक SysAdmin भी है, लेकिन, क्योंकि उसके पास सीएमके तक पहुंच नहीं है, UserA एसएसएनसीएल को सादा पाठ में नहीं एक्सेस कर सकता है। आप इसे मशीनए से SSMS का उपयोग करके, उपयोगकर्ता ए के रूप में प्रवेश कर सकते हैं और एसएसएनसीॉल पूछताछ कर सकते हैं

यदि आपके पास अतिरिक्त प्रश्न हैं, तो कृपया उन्हें टिप्पणी अनुभाग में रखें और मैं उनका जवाब दे सकता हूं।


एक अतिरिक्त और बहुत महत्वपूर्ण विचार:

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

कृपया अधिक जानकारी और उपयोगी दिशानिर्देशों के लिए https://msdn.microsoft.com/en-us/library/mt708953.aspx#SecurityForKeyManagement देखें।







always-encrypted