इंटीग्रेटेड सिक्योरिटी = ट्रू और इंटीग्रेटेड सिक्योरिटी = एसएसपीआई में क्या अंतर है?


531

मेरे पास दो एप्लिकेशन हैं जो एकीकृत सुरक्षा का उपयोग करते हैं। एक Integrated Security = trueकनेक्शन स्ट्रिंग में असाइन करता है, और दूसरा सेट करता है Integrated Security = SSPI

बीच क्या अंतर है SSPIऔर trueएकीकृत सुरक्षा के संदर्भ में?


70
स्वीकृत उत्तर सबसे अच्छा नहीं है, इसका पूरी तरह से सही भी नहीं है। Integrated Security = Trueया SSPIसमान नहीं हैं। Integrated Security=true;सभी SQL प्रदाताओं में काम नहीं करता है, यह OleDbप्रदाता के साथ उपयोग किए जाने पर एक अपवाद को फेंकता है। इसलिए मूल रूप Integrated Security=SSPI;से पसंद किया जाता है क्योंकि दोनों प्रदाता SQLClientऔर OleDBप्रदाता के साथ काम करता है। मैंने बेहतर स्पष्टीकरण के लिए एक उत्तर जोड़ा है।
प्रणव सिंह

3
@PranavSingh के पास सही विचार है, यह सवाल तब तक अधूरा है जब तक आप निर्दिष्ट नहीं करते कि आप किस प्रदाता का उपयोग कर रहे हैं। विभिन्न प्रदाता आंतरिक अवस्थाओं में विभिन्न तारों को स्वीकार और / या अनुवाद करते हैं।
मार्क

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

जवाबों:


436

माइक्रोसॉफ्ट के अनुसार वे एक ही चीज हैं।

जब false, कनेक्शन में उपयोगकर्ता आईडी और पासवर्ड निर्दिष्ट किया जाता है। जब सत्य है, तो वर्तमान विंडोज खाता क्रेडेंशियल्स प्रमाणीकरण के लिए उपयोग किया जाता है।
मान्यता प्राप्त मूल्यों कर रहे हैं true, false, yes, no, और sspi(जोरदार सिफारिश की) है, जो के बराबर है true


28
मूल रूप से, मुझे लगता है कि "ट्रू" ने एनटीएलएम और "एसएसपीआई" ने केर्बरोस का इस्तेमाल किया था, लेकिन अब वे विनिमेय हैं।
SqlRyan

5
अंतिम टिप्पणी की जाँच नहीं की, लेकिन अगर सच है, तो उत्तर के रूप में होना चाहिए, लेकिन टिप्पणी नहीं
जॉनी_ड

20
@RodneyFoley क्षमा करें, मेरे परीक्षण पुष्टि करते हैं कि यह उत्तर सही है और आपकी टिप्पणी नहीं है। हो सकता है कि उसने एक बार इस तरह से काम किया हो, लेकिन यह अब नहीं है, और आप एक Microsoft डॉक्टर को कोई भी संदर्भ प्रदान नहीं कर सकते हैं जो आपकी राय का समर्थन करता है।
कर्क ब्रॉडहर्स्ट

3
कर्क से सहमत हूँ। जब SSPI निर्दिष्ट किया जाता है तो उपयोगकर्ता / पासवर्ड को अनदेखा किया जाता है - .net 4.0, SQL सर्वर 2012.
एलेक्स डेस पेलागोस

3
इसलिए अगर वे "एक ही बात" "एसएसपीआई" "सच" या "हाँ" के बजाय "दृढ़ता से अनुशंसा" क्यों करते हैं? यही कारण है कि मैं इस सवाल पर आया हूं ...
ज़ी कार्लोस

171

Integrated Security=true;सभी SQL प्रदाताओं में काम नहीं करता है, यह OleDbप्रदाता के साथ उपयोग किए जाने पर एक अपवाद को फेंकता है।

इसलिए मूल रूप Integrated Security=SSPI;से पसंद किया जाता है क्योंकि दोनों प्रदाता SQLClientऔर OleDBप्रदाता के साथ काम करता है।

यहाँ MSDN के अनुसार सिंटैक्स का पूरा सेट है - कनेक्शन स्ट्रिंग सिंटैक्स (ADO.NET)

! [विंडोज प्रामाणिक सिंटेक्स


73

Windows प्रमाणीकरण का उपयोग करना

डेटाबेस सर्वर से कनेक्ट करने के लिए विंडोज प्रमाणीकरण का उपयोग करने की सिफारिश की जाती है, जिसे आमतौर पर एकीकृत सुरक्षा के रूप में जाना जाता है। विंडोज प्रमाणीकरण को निर्दिष्ट करने के लिए, आप डेटा प्रदाता के साथ निम्न दो कुंजी-मूल्य जोड़े का उपयोग कर सकते हैं। SQL सर्वर के लिए नेट फ्रेमवर्क:

 Integrated Security = true;
 Integrated Security = SSPI;

हालाँकि, डेटा प्रदाता .NET Framework OleDb के साथ केवल दूसरा काम करता है । यदि आप Integrated Security = trueConnectionString के लिए सेट करते हैं तो एक अपवाद फेंक दिया जाता है।

डेटा प्रदाता में विंडोज प्रमाणीकरण निर्दिष्ट करने के लिए। ओडीबीसी के लिए नेट फ्रेमवर्क, आपको निम्नलिखित कुंजी-मूल्य जोड़ी का उपयोग करना चाहिए।

Trusted_Connection = yes;

स्रोत: MSDN: कनेक्शन स्ट्रिंग्स के साथ कार्य करना


33

यदि हम .Net Reflectorवास्तविक कोड को देखने के लिए उपयोग करते हैं तो कई सवालों के जवाब मिल जाते हैं SqlConnection:) trueऔर sspiसमान हैं:

internal class DbConnectionOptions

...

internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
    if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
    {
        return true;
    }
}

...

EDIT 20.02.2018 अब .Net Core में हम इसके ओपन सोर्स को github पर देख सकते हैं! ConvertValueToIntegratedSecurityInternal विधि के लिए खोजें:

https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs


2
कोड का वह भाग केवल एक मामले के लिए संपत्ति है जिसे नाम से समझाया जा सकता है ConvertValueToIntegratedSecurityInternal। उस संपत्ति का उपयोग केवल तब किया जाता है जब प्रदाता ऐसा SqlClientहोता है SqlClient, SSPIऔर trueग्राहक नहीं होने पर OleDbया समान होते हैं OracleClient। मैंने स्पष्ट किया है कि msdn संदर्भ के साथ stackoverflow.com/a/23637478/704008 में
प्रणव सिंह

प्रणव के कारण वोट डाउन।
स्कॉट

21

एकीकृत सुरक्षा = गलत: कनेक्शन में उपयोगकर्ता आईडी और पासवर्ड निर्दिष्ट हैं। एकीकृत सुरक्षा = सत्य: वर्तमान Windows खाता क्रेडेंशियल्स प्रमाणीकरण के लिए उपयोग किया जाता है।

एकीकृत सुरक्षा = एसएसपीआई: यह सच के बराबर है।

हम कनेक्शन स्ट्रिंग से उपयोगकर्ता नाम और पासवर्ड विशेषताओं से बच सकते हैं और एकीकृत सुरक्षा का उपयोग कर सकते हैं


13

मुझे इसके साथ शुरू करते हैं Integrated Security = false

false कनेक्शन स्ट्रिंग में उपयोगकर्ता आईडी और पासवर्ड निर्दिष्ट हैं।
true Windows खाता क्रेडेंशियल्स प्रमाणीकरण के लिए उपयोग किया जाता है।

मान्यता प्राप्त मान हैं true, false, yes, no, और SSPI

तो User IDऔर Passwordनिर्दिष्ट कर रहे हैं और एकीकृत सुरक्षा के लिए सेट है true, तो User IDऔर Passwordध्यान नहीं दिया जाएगा और एकीकृत सुरक्षा का उपयोग किया जाएगा


7

ध्यान दें कि कनेक्शन स्ट्रिंग्स क्या और कैसे आप डेटा से कनेक्ट कर रहे हैं के लिए विशिष्ट हैं। ये एक ही डेटाबेस से जुड़ रहे हैं लेकिन पहला SQL सर्वर के लिए .NET फ्रेमवर्क डेटा प्रोवाइडर का उपयोग कर रहा है। इंटीग्रेटेड सिक्योरिटी = OleDb के लिए सही काम नहीं करेगा।

  • डेटा स्रोत =; प्रारंभिक सूची = एस्पनेटड; एकीकृत सुरक्षा = सच
  • प्रदाता = SQLOLEDB; डेटा स्रोत =।; एकीकृत सुरक्षा = एसएसपीआई; प्रारंभिक कैटलॉग = एस्पनेटडब

जब संदेह में Visual Studio Server Explorer डेटा कनेक्शंस का उपयोग करें।


5

यदि आप .NET SqlClient लाइब्रेरी का उपयोग कर रहे हैं तो सत्य केवल मान्य है। यह OLEDB का उपयोग करते समय मान्य नहीं है। जहाँ SSPI आप दोनों में उपयोग कर रहे हैं, या तो .net SqlClient पुस्तकालय या OLEDB।



2

मेरे विचार से,

यदि आप एकीकृत सुरक्षा = SSPI का उपयोग नहीं करते हैं, तो आपको कनेक्शन स्ट्रिंग में उपयोगकर्ता नाम और पासवर्ड को हार्डकोड करने की आवश्यकता है, जिसका अर्थ है "अपेक्षाकृत असुरक्षित" क्यों, क्योंकि सभी कर्मचारियों की पहुंच पूर्व कर्मचारी तक भी दुर्भावनापूर्ण रूप से जानकारी का उपयोग कर सकती है।


1
कनेक्शन स्ट्रिंग आवश्यक रूप से किसी भी कर्मचारी को दिखाई नहीं देता है।
अंडरस्कोर_ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.