मेरे पास दो एप्लिकेशन हैं जो एकीकृत सुरक्षा का उपयोग करते हैं। एक Integrated Security = true
कनेक्शन स्ट्रिंग में असाइन करता है, और दूसरा सेट करता है Integrated Security = SSPI
।
बीच क्या अंतर है SSPI
और true
एकीकृत सुरक्षा के संदर्भ में?
मेरे पास दो एप्लिकेशन हैं जो एकीकृत सुरक्षा का उपयोग करते हैं। एक Integrated Security = true
कनेक्शन स्ट्रिंग में असाइन करता है, और दूसरा सेट करता है Integrated Security = SSPI
।
बीच क्या अंतर है SSPI
और true
एकीकृत सुरक्षा के संदर्भ में?
जवाबों:
माइक्रोसॉफ्ट के अनुसार वे एक ही चीज हैं।
जब
false
, कनेक्शन में उपयोगकर्ता आईडी और पासवर्ड निर्दिष्ट किया जाता है। जब सत्य है, तो वर्तमान विंडोज खाता क्रेडेंशियल्स प्रमाणीकरण के लिए उपयोग किया जाता है।
मान्यता प्राप्त मूल्यों कर रहे हैंtrue
,false
,yes
,no
, औरsspi
(जोरदार सिफारिश की) है, जो के बराबर हैtrue
।
Integrated Security=true;
सभी SQL प्रदाताओं में काम नहीं करता है, यह OleDb
प्रदाता के साथ उपयोग किए जाने पर एक अपवाद को फेंकता है।
इसलिए मूल रूप Integrated Security=SSPI;
से पसंद किया जाता है क्योंकि दोनों प्रदाता SQLClient
और OleDB
प्रदाता के साथ काम करता है।
यहाँ MSDN के अनुसार सिंटैक्स का पूरा सेट है - कनेक्शन स्ट्रिंग सिंटैक्स (ADO.NET)
Windows प्रमाणीकरण का उपयोग करना
डेटाबेस सर्वर से कनेक्ट करने के लिए विंडोज प्रमाणीकरण का उपयोग करने की सिफारिश की जाती है, जिसे आमतौर पर एकीकृत सुरक्षा के रूप में जाना जाता है। विंडोज प्रमाणीकरण को निर्दिष्ट करने के लिए, आप डेटा प्रदाता के साथ निम्न दो कुंजी-मूल्य जोड़े का उपयोग कर सकते हैं। SQL सर्वर के लिए नेट फ्रेमवर्क:
Integrated Security = true;
Integrated Security = SSPI;
हालाँकि, डेटा प्रदाता .NET Framework OleDb के साथ केवल दूसरा काम करता है । यदि आप Integrated Security = true
ConnectionString के लिए सेट करते हैं तो एक अपवाद फेंक दिया जाता है।
डेटा प्रदाता में विंडोज प्रमाणीकरण निर्दिष्ट करने के लिए। ओडीबीसी के लिए नेट फ्रेमवर्क, आपको निम्नलिखित कुंजी-मूल्य जोड़ी का उपयोग करना चाहिए।
Trusted_Connection = yes;
यदि हम .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 विधि के लिए खोजें:
ConvertValueToIntegratedSecurityInternal
। उस संपत्ति का उपयोग केवल तब किया जाता है जब प्रदाता ऐसा SqlClient
होता है SqlClient
, SSPI
और true
ग्राहक नहीं होने पर OleDb
या समान होते हैं OracleClient
। मैंने स्पष्ट किया है कि msdn संदर्भ के साथ stackoverflow.com/a/23637478/704008 में
एकीकृत सुरक्षा = गलत: कनेक्शन में उपयोगकर्ता आईडी और पासवर्ड निर्दिष्ट हैं। एकीकृत सुरक्षा = सत्य: वर्तमान Windows खाता क्रेडेंशियल्स प्रमाणीकरण के लिए उपयोग किया जाता है।
एकीकृत सुरक्षा = एसएसपीआई: यह सच के बराबर है।
हम कनेक्शन स्ट्रिंग से उपयोगकर्ता नाम और पासवर्ड विशेषताओं से बच सकते हैं और एकीकृत सुरक्षा का उपयोग कर सकते हैं
मुझे इसके साथ शुरू करते हैं Integrated Security = false
false
कनेक्शन स्ट्रिंग में उपयोगकर्ता आईडी और पासवर्ड निर्दिष्ट हैं।
true
Windows खाता क्रेडेंशियल्स प्रमाणीकरण के लिए उपयोग किया जाता है।
मान्यता प्राप्त मान हैं true
, false
, yes
, no
, और SSPI
।
तो User ID
और Password
निर्दिष्ट कर रहे हैं और एकीकृत सुरक्षा के लिए सेट है true
, तो User ID
और Password
ध्यान नहीं दिया जाएगा और एकीकृत सुरक्षा का उपयोग किया जाएगा
ध्यान दें कि कनेक्शन स्ट्रिंग्स क्या और कैसे आप डेटा से कनेक्ट कर रहे हैं के लिए विशिष्ट हैं। ये एक ही डेटाबेस से जुड़ रहे हैं लेकिन पहला SQL सर्वर के लिए .NET फ्रेमवर्क डेटा प्रोवाइडर का उपयोग कर रहा है। इंटीग्रेटेड सिक्योरिटी = OleDb के लिए सही काम नहीं करेगा।
जब संदेह में Visual Studio Server Explorer डेटा कनेक्शंस का उपयोग करें।
यदि आप .NET SqlClient लाइब्रेरी का उपयोग कर रहे हैं तो सत्य केवल मान्य है। यह OLEDB का उपयोग करते समय मान्य नहीं है। जहाँ SSPI आप दोनों में उपयोग कर रहे हैं, या तो .net SqlClient पुस्तकालय या OLEDB।
मेरे विचार से,
यदि आप एकीकृत सुरक्षा = SSPI का उपयोग नहीं करते हैं, तो आपको कनेक्शन स्ट्रिंग में उपयोगकर्ता नाम और पासवर्ड को हार्डकोड करने की आवश्यकता है, जिसका अर्थ है "अपेक्षाकृत असुरक्षित" क्यों, क्योंकि सभी कर्मचारियों की पहुंच पूर्व कर्मचारी तक भी दुर्भावनापूर्ण रूप से जानकारी का उपयोग कर सकती है।
Integrated Security = True
याSSPI
समान नहीं हैं।Integrated Security=true;
सभी SQL प्रदाताओं में काम नहीं करता है, यहOleDb
प्रदाता के साथ उपयोग किए जाने पर एक अपवाद को फेंकता है। इसलिए मूल रूपIntegrated Security=SSPI;
से पसंद किया जाता है क्योंकि दोनों प्रदाताSQLClient
औरOleDB
प्रदाता के साथ काम करता है। मैंने बेहतर स्पष्टीकरण के लिए एक उत्तर जोड़ा है।