My colleague has been working on a web part in an FBA environment. Among other things, the web part pulls some data from SQL server. The grand plan for this project dictates that a DBA configures data level security in SQL (ஒரு SQL வினவல் ஒரு பயனர் ஐடி அல்லது வேறு அணுகுமுறை உட்பொதிப்பதன் எதிர்ப்பு).
The problem is that SQL server doesn’t know anything about our FBA environment so it can’t trust us. We solved this problem by, ஒரு நல்ல வார்த்தை இல்லாததால், manually impersonating an AD user so that we could connect to SQL such that SQL data level security works.
FBA ஒரு ASP.NET அம்சம் கூட, நாம் ஷேர்பாயிண்ட் தேசிய மக்கள் பல்வேறு தேடுபொறிகள் கற்று என்று நீங்கள் FBA ஐந்து குவெரி என்றால், you must mean you want know how to configure FBA in SharePoint. I failed to find find any information on how to enable an FBA oriented ASP.NET application to communicate with SQL in the way we needed.
இந்த ஆராய்ச்சி போக்கில், நாம் மீண்டும் படிக்க இந்த கட்டுரை: ASP.NET ஆள்மாறாட்டம்
மேலும் ஆராய்ச்சி இந்த codproject கட்டுரை நம்மை இட்டு: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
என்று எங்கள் குறியீடு எழுத உதவி, which I’ve included below. It’s not the most elegant stuff, but it worked. I hope you find it helpful.
இங்கே எங்களுக்கு வேலை என்று குறியீடு தான்:
பாதுகாக்கப்படுவதால், வெற்றிடத்தை btnSearchCarrier_Click(பொருள் அனுப்புநர், EventArgs மின்னஞ்சல்) { முயற்சி { U = ImpersonateUser புதிய ImpersonateUser(); // அனைத்து: சான்றுகளை பதிலாக ("DomainName", "UserName", "Password"); // CODE // iU.Undo(); } பிடி (தவிர முன்னாள்) { } } // ஆள்மாறாட்டம் வர்க்கம் பயன்படுத்தி கீழே குறிப்பிட்டுள்ள. பொது வர்க்கம் ImpersonateUser { [DllImport("advapi32.dll", SetLastError = உண்மையான)] பொது நிலையான வெளிப்புறமாக bool LogonUser( சரம் lpszUsername, சரம் lpszDomain, சரம் lpszPassword, int dwLogonType, int dwLogonProvider, குறிப்பு IntPtr phToken); [DllImport("kernel32.dll", Charset = CharSet.Auto)] தனிப்பட்ட வெளிப்புறமாக நிலையான bool CloseHandle(IntPtr கைப்பிடி); தனிப்பட்ட நிலையான IntPtr tokenHandle = புதிய IntPtr(0); தனிப்பட்ட நிலையான WindowsImpersonationContext impersonatedUser; // நீங்கள் ஒரு டிஎல்எல் இந்த குறியீடு இணைத்துக்கொள்ள என்றால், அது கோரி உறுதி // FullTrust கொண்ட ரன்கள். [PermissionSetAttribute(SecurityAction.Demand, = பெயரிட "FullTrust")] பொது ஆள்மாறாட்டம் களைவதற்கு(சரம் DOMAINNAME, சரம் userName, சரம் கடவுச்சொல்லை) { முயற்சி { // பயனர் டோக்கன் பெற நிர்வகிக்கப்படாததை LogonUser செயல்பாட்டை பயன்படுத்த // குறிப்பிட்ட பயனர், டொமைன், மற்றும் கடவுச்சொல்லை. const int LOGON32_PROVIDER_DEFAULT = 0; // இந்த அளவுரு கடந்து LogonUser ஒரு முதன்மை டோக்கன் உருவாக்க காரணமாகிறது. const int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // அடி -1 ஒரு அணுகல் டோக்கன் ஒரு கைப்பிடி பெற LogonUser அழைப்பு. bool returnValue = LogonUser( userName, கள பெயர், கடவுச்சொல்லை, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, சொத்து tokenHandle); // tokenHandle - புதிய பாதுகாப்பு டோக்கன் என்றால், (தவறான == returnValue) { int ரெட் = Marshal.GetLastWin32Error(); Console.WriteLine("LogonUser call failed with error code : " + சரியான); போடு புதிய System.ComponentModel.Win32Exception(சரியான); } // அடி - 2 WindowsIdentity = newId புதிய WindowsIdentity(tokenHandle); // அடி -3 impersonatedUser = newId.Impersonate(); } பிடி (தவிர முன்னாள்) { Console.WriteLine("Exception occurred. " + ex.Message); } } /// <சுருக்கம்> /// ஆள்மாறாட்டம் தடுக்கிறார்கள் /// </சுருக்கம்> பொது தவிர் களைவதற்கு() { impersonatedUser.Undo(); // டோக்கன்கள் விடுவித்து. என்றால், (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</இறுதியில்>