FBA और SQL सर्वर: एक प्रेम कहानी

मेरे सहयोगी FBA माहौल में एक वेब पार्ट पर काम कर रहा है. अन्य बातों के अलावा, वेब पार्ट SQL सर्वर से कुछ डेटा खींचती है. एक DBA डेटा स्तर की सुरक्षा में SQL को कॉन्फ़िगर करता है कि इस परियोजना के लिए भव्य योजना तय कर (विरोध के रूप में एक एसक्यूएल क्वेरी या कुछ अन्य दृष्टिकोण में एक उपयोगकर्ता ID एम्बेड करना).

समस्या यह है कि SQL सर्वर हमारे FBA परिवेश के बारे में कुछ भी पता नहीं है तो यह हम पर विश्वास नहीं कर सकता है. हम इस समस्या का हल, एक बेहतर शब्द की कमी के लिए, जिससे कि SQL डेटा स्तर सुरक्षा काम करता है, कि इस तरह हम SQL से कनेक्ट कर सकता मैन्युअल रूप से AD उपयोगकर्ता के रूप में आई.

भले ही एक ASP.NET सुविधा FBA है, हम SharePoint राष्ट्र लोगों को सिखाया है यदि FBA के लिए क्वेरी किए जा रहे हैं कि विभिन्न खोज इंजन, आप आप चाहते हैं पता है कि कैसे में SharePoint FBA कॉन्फ़िगर करने के लिए मतलब होगा. मैं खोजने के लिए विफल एक FBA सक्षम करने के लिए कैसे पर किसी भी जानकारी के साथ SQL संचार में जिस तरह से हम की जरूरत करने के लिए ASP.NET अनुप्रयोग उन्मुख ढूँढें.

इस दिशा में शोध, हम इस लेख फिर से पढ़ें: ASP.NET प्रतिरूपण

और अधिक शोध हमें इस codproject आलेख के लिए नेतृत्व: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

कि हमें हमारे कोड लिखने में मदद की, जो मैं नीचे शामिल है. यह सबसे खूबसूरत सामान नहीं है, लेकिन यह काम किया. मुझे आशा है कि आप इसे उपयोगी पाते.

यहाँ कोड है कि हमारे लिए काम किया है:

संरक्षित शून्य btnSearchCarrier_Click(ऑब्जेक्ट प्रेषक, EventArgs ई)
 {
 प्रयास करें
 {
 ImpersonateUser iU = नई ImpersonateUser();
 // TODO: क्रेडेंशियल्स iU.Impersonate की जगह("DomainName", "उपयोगकर्ता नाम", "पासवर्ड");

//
 कोड
//

 iU.Undo();
 }
 पकड़ो (अपवाद ex)
 {

 }
 }

// प्रतिरूपण वर्ग के रूप में उल्लेख किया है नीचे.

सार्वजनिक वर्ग ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = सच है)]
 सार्वजनिक स्थैतिक extern bool LogonUser(
 स्ट्रिंग lpszUsername,
 स्ट्रिंग lpszDomain,
 स्ट्रिंग lpszPassword,
 int dwLogonType,
 int dwLogonProvider,
 रेफरी की IntPtr phToken);

 [DllImport('kernel32.dll', CharSet = CharSet.Auto)]
 निजी extern स्थैतिक bool CloseHandle(की IntPtr हैंडल);

 निजी स्थैतिक की IntPtr tokenHandle = नई की IntPtr(0);
 निजी स्थैतिक WindowsImpersonationContext impersonatedUser;

 // यदि आप इस कोड को एक DLL में शामिल, सुनिश्चित करें कि यह मांग
 // FullTrust साथ चलाता है.
 [PermissionSetAttribute(SecurityAction.Demand, नाम = "FullTrust")]
 सार्वजनिक शून्य का रूप धारण करें(स्ट्रिंग domainName, स्ट्रिंग उपयोगकर्ता नाम, स्ट्रिंग पासवर्ड)
 {
 प्रयास करें
 {

 // उपयोगकर्ता के लिए टोकन प्राप्त करने के लिए अप्रबंधित LogonUser फ़ंक्शन का उपयोग करें
 // निर्दिष्ट उपयोगकर्ता, डोमेन, और पासवर्ड.
 const int LOGON32_PROVIDER_DEFAULT = 0;

 // यह पैरामीटर गुजर रहा एक प्राथमिक टोकन बनाने के लिए LogonUser का कारण बनता है.
 const int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // कदम -1 किसी पहुँच टोकन के लिए कोई हैंडल को प्राप्त करने के लिए LogonUser कॉल.
 बूल returnValue = LogonUser(
 उपयोगकर्ता नाम,
 domainName,
 पासवर्ड,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 रेफरी tokenHandle); // tokenHandle - नए सुरक्षा टोकन

 अगर (false returnValue = =)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser कॉल त्रुटि कोड के साथ विफल हुआ : " +
 रेत);
 फेंक नया System.ComponentModel.Win32Exception(रेत);
 }

 // कदम - 2
 WindowsIdentity newId = नई WindowsIdentity(tokenHandle);
 // कदम -3
 impersonatedUser = newId.Impersonate();

 }
 पकड़ो (अपवाद ex)
 {
 Console.WriteLine("अपवाद उत्पन्न हुई. " + पूर्व।संदेश);
 }
 }


 /// <सारांश>
 /// बंद हो जाता है प्रतिरूपण
 /// </सारांश>
 सार्वजनिक शून्य पूर्ववत् करें()
 {
 impersonatedUser.Undo();
 // टोकन से मुक्त.
 अगर (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</अंत>

मेरे ब्लॉग के लिए सदस्यता लें.

Technorati टैग:

पर एक विचार "FBA और SQL सर्वर: एक प्रेम कहानी

  1. David जल्दी
    माफ करना इस पोस्ट करने के लिए असंबंधित सवाल, लेकिन मैं कैसे आप इस ब्लॉग से एक ईमेल भेजने के लिए बाहर आंकड़ा नहीं कर सका.
    आप एक पिछले पोस्ट जहाँ आप एक लायब्रेरी untagged डेटा देखने के लिए फ़िल्टर करने के लिए एक शानदार तरीका की पेशकश की थी. आप कैसे आप किसी पूरे दस्तावेज़ लायब्रेरी में untagged दस्तावेज़ों की एक सूची देख सकता है के रूप में कोई विचार है? एक रिक्त फ़ील्ड में उन्नत खोज का उपयोग कर किसी भी परिणाम वापस नहीं करता है.

कोई जवाब दो

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. अपेक्षित स्थानों को रेखांकित कर दिया गया है *