FBA и SQL Server: Љубовна приказна

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);
 }
 }

</крајот>

Да се ​​претплатите на мојот блог.

Technorati Тагови:

Една мисла на "FBA и SQL Server: Љубовна приказна

  1. David Early
    Sorry for posting this unrelated question but I could not figure out how to send you an email from this blog.
    You had a previous post where you offered a great way to filter a library to view untagged data. Do you have any thoughts as to how you might view a list of untagged documents in an entire document library? Using an empty field in advanced search does not return any results.

Остави Одговори

Вашата е-маил адреса нема да бидат објавени. Задолжителни полиња се означени *