FBA a SQL Gweinyddwr: A Love Story

Mae fy nghyd-Aelod wedi bod yn gweithio ar ran we mewn amgylchedd FBA. Ymhlith pethau eraill, Mae y rhan o'r we yn dwyn rhai data o'r gweinydd SQL. Mae cynllun mawr ar gyfer y prosiect hwn yn mynnu bod Mae'r DBA yn ffurfweddu'r lefel diogelwch data yn SQL (yn hytrach na sefydlu yn ID defnyddiwr mewn ymholiad SQL neu ryw ddull arall).

Y broblem yw nad yw'n gweinydd SQL yn gwybod unrhyw beth am ein hamgylchedd FBA felly ni ellir ei ymddiried ynom. Rydym yn datrys y broblem hon gan, am ddiffyg gair gwell, eich hun hi dynwared defnyddiwr OC fel y gellid cysylltu SQL y mae SQL data lefel gwaith diogelwch.

Hyd yn oed er FBA yn nodwedd ASP.NET, rydym yn SharePoint Nation pobl wedi dysgu y gwahanol beiriannau chwilio, os ydych yn holi am FBA, Rhaid i chi olygu eich bod am wybod sut i ffurfweddu FBA yn SharePoint. Methais ddod o hyd i canfod a oedd unrhyw wybodaeth ar sut i alluogi FBA yn canolbwyntio ar gais ASP.NET i gyfathrebu â SQL yn y ffordd yr oedd angen inni.

Wrth ymchwilio i'r, rydym yn ail-ddarllen yr erthygl hon: ASP.NET dynwared

Ein harwain mwy o ymchwil i'r erthygl hon codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Mae hynny'n ein helpu i ysgrifennu ein cod, Yr wyf wedi cynnwys isod. Nid yw y pethau mwyaf cain, ond roedd yn gweithio. Gobeithiaf y bydd yn ddefnyddiol yn.

Dyma'r cod sy'n gweithio i ni:

diogelu ddi-rym btnSearchCarrier_Click(anfonwr gwrthrych, EventArgs e)
 {
 ceisio
 {
 U = ImpersonateUser newydd ImpersonateUser();
 // POB: Amnewid cymwysterau
 ("DomainName", "UserName", "Cyfrinair");

//
 COD
//

 iU.Undo();
 }
 dal (Ex Eithriad)
 {

 }
 }

// Defnyddio dosbarth dynwared fel a grybwyllir isod.

cyhoeddus dosbarth ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = wir)]
 cyhoeddus sefydlog allanol bool LogonUser(
 LpszUsername llinyn,
 Llinynnol lpszDomain,
 Llinynnol lpszPassword,
 dwLogonType int,
 int dwLogonProvider,
 cyf IntPtr phToken);

 [DllImport("kernel32.dll", Charset = CharSet.Auto)]
 preifat allanol sefydlog Bool CloseHandle(IntPtr trin);

 preifat sefydlog IntPtr tokenHandle = newydd IntPtr(0);
 preifat sefydlog WindowsImpersonationContext impersonatedUser;

 // Os ydych yn cynnwys y cod hwn i mewn i DLL, gofalwch eich bod yn mynnu ei fod yn
 // rhedeg gyda FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, Enwch = "FullTrust")]
 cyhoeddus dynwared unedau gwag(llinyn enw parth, userName llinyn, cyfrinair llinyn)
 {
 ceisio
 {

 // Defnyddiwch y swyddogaeth LogonUser heb ei reoli i gael y tocyn defnyddiwr ar gyfer
 // y defnyddiwr a bennir, parth, a chyfrinair.
 Etholaeth int LOGON32_PROVIDER_DEFAULT = 0;

 // Pasio paramedr mae hyn yn achosi LogonUser i greu tocyn gynradd.
 Etholaeth int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // Cam -1 Ffoniwch LogonUser i gael dolen i tocyn mynediad.
 Bool returnValue = LogonUser(
 userName,
 enw parth,
 cyfrinair,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 Eiddo tokenHandle); // tokenHandle - diogelwch newydd tocyn

 os (ffug == returnValue)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser alwad wedi methu gyda'r cod gwall : " +
 iawn);
 taflu System.ComponentModel newydd.Win32Exception(iawn);
 }

 // Cam - 2
 WindowsIdentity Newid = newydd WindowsIdentity(tokenHandle);
 // Cam -3
 impersonatedUser = newId.Impersonate();

 }
 dal (Ex Eithriad)
 {
 Console.WriteLine("Digwyddodd eithriad wrth. " + ex.Message);
 }
 }


 /// <crynodeb>
 /// Arosfannau ffugio
 /// </crynodeb>
 cyhoeddus unedau gwag Dadwneud()
 {
 impersonatedUser.Undo();
 // Rhyddhau'r tocynnau.
 os (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</diwedd>

Tanysgrifio i fy mlog.

Tagiau Technorati:

Roedd un o'r farn ar "FBA a SQL Gweinyddwr: A Love Story

  1. David Cynnar
    Mae'n ddrwg gennym ar gyfer postio y cwestiwn nad ydynt yn gysylltiedig, ond ni allwn chyfrif i maes sut i anfon e-bost gan blog hon yn eich.
    Yr oedd gennych swydd flaenorol lle'r oedd eich cynnig yn ffordd wych i hidlo Llyfrgell i weld data gael. A oes gennych unrhyw syniadau ynghylch sut y gallai chi weld rhestr o'r dogfennau gael yn Llyfrgell ddogfen gyfan? Nad yw defnyddio'r cae gwag yn chwilio uwch yn dychwelyd unrhyw ganlyniadau.
    Ateb

Ad a Ateb

Ni fydd eich cyfeiriad e-bost yn cael ei gyhoeddi. Meysydd gofynnol yn cael eu marcio *