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 (baita SQL kontsulta batean erabiltzaile-identifikazio bat edo beste hurbilketa batzuk txertatzea aurka).
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, hobea hitza eza, manually impersonating an AD user so that we could connect to SQL such that SQL data level security works.
Nahiz FBA ASP.NET film luzea da, dugu SharePoint Nation pertsona irakasten hainbat bilatzaileak zaren FBA bada neurketako duten, 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.
Hau ikertzen ditu, dugu berriro irakurri artikulu hau: ASP.NET izenean
Ikerketa gehiago ekarri digu codproject Artikulu honetan: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
Lagundu duten gure kodea idatzi, which I’ve included below. It’s not the most elegant stuff, baina lan egin. I hope you find it helpful.
Hona hemen kodea Gurekin lan egin:
babesa void btnSearchCarrier_Click(objektu bidaltzailea, EventArgs e) { saiatu { U = ImpersonateUser berria ImpersonateUser(); // DENAK: Ordezkatu kredentzialak ("DomainName", "UserName", "Password"); // CODE // iU.Undo(); } harrapatzeko (Exception ex) { } } // Izenean klasea erabiliz gisa aipatu azpitik. publikoak klasean ImpersonateUser { [DllImport("advapi32.dll", SetLastError = Egia)] publikoak estatiko kanpotik bool LogonUser( Katea lpszUsername, Katea lpszDomain, Katea lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); [DllImport("kernel32.dll", Charset = CharSet.Auto)] pribatua kanpotik estatiko bool CloseHandle(IntPtr heldulekua); pribatua estatiko IntPtr tokenHandle = berria IntPtr(0); pribatua estatiko WindowsImpersonationContext impersonatedUser; // Txertatu duzun kode hau bada DLL bihurtu, ziur egon dela aldarrikatzeko // FullTrust dituzten eskailerak. [PermissionSetAttribute(SecurityAction.Demand, Izena = "FullTrust")] publikoak gal itxurak(katea domeinuarenizena, katea userName, katea pasahitza) { saiatu { // Erabili unmanaged LogonUser funtzioa erabiltzaileari tokenaren iritsi // zehaztu erabiltzailea, domeinua, eta pasahitza. eraikiak int LOGON32_PROVIDER_DEFAULT = 0; // Parametro hau pasatzen eragiten LogonUser lehen token bat sortzeko. eraikiak int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // Urratsa -1 Deitu LogonUser helduleku bat lortzeko sarbide-token bat. bool returnValue = LogonUser( userName, domeinu izena, pasahitza, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, Jabetza tokenHandle); // tokenHandle - segurtasun-tokena bada (faltsua == returnValue) { int ret = Marshal.GetLastWin32Error(); Console.WriteLine("LogonUser call failed with error code : " + eskubidea); bota berriak System.ComponentModel.Win32Exception(eskubidea); } // Urratsa - 2 WindowsIdentity newId = berria WindowsIdentity(tokenHandle); // Urratsa -3 impersonatedUser = newId.Impersonate(); } harrapatzeko (Exception ex) { Console.WriteLine("Exception occurred. " + ex.Message); } } /// <laburpena> /// Geratu izenean /// </laburpena> publikoak gal Desegin() { impersonatedUser.Undo(); // Free token. bada (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</amaiera>