2009-12-17 7 views
5

के लिए सुरक्षित स्ट्रिंग का उपयोग करके मैं डेटाबेस के लिए कनेक्शन स्ट्रिंग रखने के लिए एक सिक्योरस्ट्रिंग का उपयोग करना चाहता हूं। लेकिन जैसे ही मैंने एसक्यूएलकनेक्शन ऑब्जेक्ट की कनेक्शन स्ट्रिंग प्रॉपर्टी को सुरक्षितस्ट्रिंग के मूल्य पर सेट किया है, निश्चित रूप से यह मेरे एप्लिकेशन की मेमोरी को पढ़ने में सक्षम किसी अन्य एप्लिकेशन के लिए दृश्यमान हो जाएगा?एक एसक्यूएल कनेक्शन

मैं निम्नलिखित मान्यताओं बना दिया है:
क) मैं इस तरह के रूप Hawkeye

+2

जाहिर हॉकआई 1.2.0 SecureStrings दिखा सकते हैं ... तो, आपके सवाल का क्या है? –

+1

ओह - तो फिर सुरक्षित स्थिति में क्या बात है? – Richard

उत्तर

3

आपका बिल्कुल सही SecureString जब आप इस तरह के एक ConnectionString सेटिंग के रूप में, एक प्रबंधित API में स्ट्रिंग पारित करने के लिए की जरूरत है किसी भी लाभ के साथ आप प्रदान नहीं करता है।

यह वास्तव में सुरक्षित गैर-प्रबंधित API के साथ सुरक्षित संचार के लिए डिज़ाइन किया गया है।

माइक्रोसॉफ्ट सैद्धांतिक रूप से SqlConnection ऑब्जेक्ट को बढ़ाने के लिए एक सुरक्षित ConnectionString समर्थन करने के लिए विचार कर सकते हैं, लेकिन मुझे लगता है कि वे ऐसा करने की संभावना नहीं कर रहे हैं क्योंकि:

  • SecureString वास्तव में केवल एक ग्राहक अनुप्रयोग, जहां उदा में उपयोगी है उपयोगकर्ता इनपुट से चरित्र द्वारा एक पासवर्ड बनाया गया है, बिना किसी प्रबंधित स्ट्रिंग में पूरा पासवर्ड।

  • ऐसे वातावरण में, यह अधिक एसक्यूएल सर्वर के लिए कनेक्शन के लिए Windows प्रमाणीकरण का उपयोग करने की आम है।

  • एक सर्वर वहाँ एसक्यूएल सर्वर साख को बचाने के लिए अन्य तरीके हैं पर, अधिकृत प्रशासकों के लिए सर्वर तक पहुँच को सीमित करके शुरू।

+3

.NET 4.5 SQL सर्वर प्रमाणीकरण का उपयोग करते समय एक पासवर्ड को SecureString के रूप में पारित करने की अनुमति देगा: [ADO.NET 4.5 में नया क्या है] (http://msdn.microsoft.com/en-us/library/ex6y04yf (v = बनाम .110) .aspx) –

+0

यह मेरी राय है कि सिक्योरस्ट्रिंग एक सुरक्षित तरीके से रहस्यों के सभी प्रकार के संचार के लिए है और गैर-प्रबंधित एपीआई तक ही सीमित नहीं है। प्रति ली SecureString .NET 4.5 के साथ समर्थित हैं। मैं व्यक्तिगत रूप से एंटरप्राइज़ सपोर्ट इंजीनियरिंग वातावरण में काम कर रहा हूं जहां सबसे कम स्तर के समर्थन के पास एसक्यूएल में कुछ डेटा तक पहुंच हो सकती है, फिर भी यह ज्ञान नहीं दिया गया है कि SQL उपयोगकर्ता का पासवर्ड क्या है। इसके बजाय यह रहस्य प्रमाण पत्र के साथ हाथ से पहले एन्क्रिप्ट किया गया है और कार्यक्रम को प्रमाण पत्र का उपयोग दिया जाता है लेकिन उपयोगकर्ता नहीं। –

+0

@ डेविडबर्ग - मुझे आपकी बात समझ में नहीं आ रही है। SqlConnection.ConnectionString अभी भी .NET 4.5 में SecureString का उपयोग नहीं करता है। यदि आप पासवर्ड की आवश्यकता से बच सकते हैं, तो स्पष्ट रूप से यह एक बेहतर समाधान है, लेकिन यह हमेशा मामला नहीं है। और प्रमाणीकरण के लिए प्रमाणपत्र का उपयोग करने वाला एक प्रोग्राम SecureString की आवश्यकता नहीं है। – Joe

0
एक आवेदन द्वारा पढ़ा जा सकता कामयाब स्मृति
ख) में कामयाब स्मृति के भीतर किसी भी स्ट्रिंग के बाहर एक SqlConnection ऑब्जेक्ट का दृष्टांत नहीं पा रहा हूँ

यदि आप सुरक्षा के बारे में चिंतित हैं तो मुझे सुझाव है कि आपको SQL सर्वर में SSL सक्षम करना चाहिए और एसएसएल का उपयोग करके इसके साथ संवाद करना चाहिए।

+2

क्या किसी भी समय कनेक्शन पासवर्ड अभी भी स्मृति में नहीं होना चाहिए? –

+0

@ जोनबी @ शमिका हाँ, मुझे लगता है कि यह भी – Richard

+0

मुझे नहीं पता कि एसएसएल का उपयोग प्रश्न के साथ क्या करना है। – Joe

0

कनेक्शन स्ट्रिंग क्यों एक समस्या है? पासवर्ड नहीं होगा जिसे आप संरक्षित करना चाहते हैं (जब तक कि आप कनेक्शन स्ट्रिंग में पासवर्ड नहीं डाल रहे हैं जो मैंने देखा है कि सभी ड्राइवरों के लिए वैकल्पिक है)। ऐसा कहा जा रहा है कि पासवर्ड को किसी बिंदु पर स्मृति में आमतौर पर "स्पष्ट में" होना चाहिए (जब तक कि ड्राइवर के पास कुछ एपीआई न हो जो एन्क्रिप्टेड पासवर्ड या कुछ की अनुमति देता है, लेकिन संभवतः वह वास्तव में बहुत मदद नहीं करेगा)।

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

0

SQLConnection.ConnectionString में एक सिक्योरस्ट्रिंग मान असाइन करना सुरक्षा को बाईपास कर देगा, इसे बेकार बना देगा।अपनी प्रक्रिया बदली हो जाता है, कचरा कलेक्टर उसके चारों ओर स्थानांतरित कर सकते हैं, स्मृति

  • एन्क्रिप्टेड नहीं
  • में प्रतियां छोड़ने

    • पिन नहीं की:

      एक SecureString इन सामान्य स्ट्रिंग मुद्दों, ref को ठीक करने के लिए है डिस्क पर, स्ट्रिंग आपकी स्वैप फ़ाइल में बैठेगी

    • म्यूटेबल नहीं है, इसे संशोधित करने से पुराना संस्करण और नया संस्करण स्मृति में
    • n ओ जिस तरह से यह बाहर खाली करने के लिए जब आप उपयोग समाप्त होते यह

    IMHO SecureString प्रकार एक घटिया सुरक्षा कार्यान्वयन के लिए एक पैच है, और वर्तमान में SecureString सभी ढांचा भर में लागू नहीं किया गया है, तो यह लाभ कर सकते हैं ' टी पूरी तरह से इस्तेमाल किया जा सकता है।

    मुझे एक ही समस्या है, मैं स्मृति में संवेदनशील जानकारी संग्रहीत आरएसए एन्क्रिप्शन का चयन कर रहा हूं।

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

  • +0

    के नए संस्करण के साथ।नेट, सिक्योरस्ट्रिंग कार्यान्वयन अधिक समग्र है जो मूल प्रतिक्रिया को थोड़ा अप्रचलित बना देता है। –

    4

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

    https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcredential.password(v=vs.110).aspx

    http://www.codeproject.com/Tips/408901/Storing-your-connection-string-password-in-SecureS

    संबंधित मुद्दे