Mana kolēģe ir strādājusi par web daļu FBA vidē. Cita starpā, web daļu atvelk datus no SQL servera. Grand plāns šim projektam diktē, ka DBA konfigurē datu drošības līmeni SQL (nevis iekļaujot lietotāja ID SQL vaicājumā vai cita pieeja).
Problēma ir tā, ka SQL servera nezina neko par mūsu FBA vidē, tāpēc tam nevar uzticēties mums. Mēs atrisināt šo problēmu, trūkuma dēļ labāks vārds, manuāli uzdoties par reklāmu lietotāju, tāpēc, ka mēs varētu pieslēgties SQL tādam SQL datu līmeņa drošības darbi.
Pat FBA ir ASP.NET līdzeklis, SharePoint Nation cilvēki mums ir mācījuši, dažādas meklētājprogrammas, ja vaicājamās, FBA, nedrīkst nozīmēt, jūs vēlaties zināt, kā konfigurēt SharePoint FBA. Man neizdevās atrast atrast jebkādu informāciju par to, kā iespējot FBA orientēta ASP.NET lietojumprogrammas, tā, kā mums vajadzēja sazināties ar SQL.
Laikā pētot šo, Mēs vēlreiz izlasīt šo rakstu: ASP.NET personifikācija
Vairāk pētījumu mūs atveda uz šo rakstu codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
Kas palīdzēja mums mūsu koda rakstīšana, kurā ir iekļauta zemāk. Tas nav visvairāk elegants stuff, bet tā strādāja. Es ceru, ka jums tas šķiet noderīgs.
Šeit ir kods, kas strādāja ar mums:
aizsargāti spēkā neesošu btnSearchCarrier_Click(objekts sūtītājs, EventArgs e) { mēģiniet { ImpersonateUser Sv = jaunā ImpersonateUser(); // TODO: IU.Impersonate akreditācijas aizvietot("DomainName", "UserName", "Parole"); // KODS // iU.Undo(); } nozvejas (Izņēmums ex) { } } // Identifikācijas klasi, kā minēts turpmāk, izmantojot. valsts klase ImpersonateUser { [DllImport("advapi32", SetLastError = patiess)] valsts statiskā extern bool LogonUser( Virkne lpszUsername, Virkne lpszDomain, Virkne lpszPassword, Int dwLogonType, Int dwLogonProvider, ATS IntPtr phToken); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] privāts extern statiskā bool CloseHandle(IntPtr rokturi); privāts statiskā IntPtr tokenHandle = jaunā IntPtr(0); privāts statiskā WindowsImpersonationContext impersonatedUser; // Ja šajā kodeksā iestrādāt DLL, Pārliecinieties, vai pieprasīt, ka tas // sākas ar FullTrust. [PermissionSetAttribute(SecurityAction.Demand, Nosaukums = "FullTrust")] valsts spēkā neesošu Impersonate(virkne domainName, virkne userName, virkne paroli) { mēģiniet { // Izmantojiet funkciju nepārvaldītu LogonUser iegūt lietotāju pilnvaru, lai // norādīto lietotāju, domēna, un paroli. konst Int LOGON32_PROVIDER_DEFAULT = 0; // Nododot šo parametru izraisa LogonUser izveidot primārā marķiera. konst Int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // Solis -1 Zvanu LogonUser iegūt rokturi ar piekļuves tiesībām. bool returnValue = LogonUser( Lietotājvārds, domainName, parole, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ATS tokenHandle); // tokenHandle - jaunu drošības pilnvaru Ja (FALSE = = returnValue) { Int ret = Marshal.GetLastWin32Error(); WriteLine("LogonUser izsaukums neizdevās ar kļūdas kodu : " + RET); mest jaunu System.ComponentModel.Win32Exception(RET); } // Solis - 2 WindowsIdentity newId = jaunā WindowsIdentity(tokenHandle); // Solis -3 impersonatedUser = newId.Impersonate(); } nozvejas (Izņēmums ex) { WriteLine("Radās izņēmums. " + ex.Ziņojums); } } /// <kopsavilkums> /// Apstājas personifikācija /// </kopsavilkums> valsts spēkā neesošu atsaukt() { impersonatedUser.Undo(); // Bezmaksas marķieri. Ja (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</beigās>