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, ние SharePoint нацијата луѓе се предава на различни пребарувачи дека ако сте доведување во прашање за 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, но тоа работел. I hope you find it helpful.
Еве го кодот што работеле за нас:
заштитени празнина btnSearchCarrier_Click(објект испраќачот, EventArgs e) { обидете { ImpersonateUser IU = нови ImpersonateUser(); // НАПРАВИ: Замени ингеренциите ("DomainName", "UserName", "Password"); // КОД // 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; // Ако се вклучат овој код во DLL, не заборавајте да побараат тоа // работи со FullTrust. [PermissionSetAttribute(SecurityAction.Demand, Име = "FullTrust")] јавноста поништат игра улогата(низа именадомен, низа корисничко име, низа лозинка) { обидете { // Го користите на Unmanaged LogonUser функција да добие на корисникот знак за // наведениот корисник, домен, и лозинка. const int LOGON32_PROVIDER_DEFAULT = 0; // Донесувањето на овој параметар предизвикува LogonUser да се создаде основни знак. const int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // Чекор -1 Јавете се LogonUser да се добие рачка на токен за пристап. bool returnValue = LogonUser( корисничко име, име на домен, лозинка, 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); } }
</крајот>
Да се претплатите на мојот блог.