Kollégám már dolgozik egy kijelző FBA-környezetben. Többek között, a kijelzőt húzza néhány adat SQL server. A nagy terv a projekt azt diktálja, hogy egy DBA szintű adatbiztonság állítja be az SQL (szemben egy felhasználói azonosítót beágyazása egy SQL-lekérdezés, vagy néhány más megközelítés).
A probléma az, hogy SQL server nem tud semmit a FBA-környezetünk, hogy nem bíznak bennünk. Ezt a problémát megoldottuk., hiányzik a jobb szót, kézzel egy AD felhasználó megszemélyesítése, úgy, hogy mi lehet csatlakoztatni az SQL, SQL-adatok szintű biztonság együttműködik, hogy.
Annak ellenére, hogy FBA az ASP.NET szolgáltatása, SharePoint-nemzet, a nép is tanított a különböző keresőmotorok, ha az űrlapalapú Hitelesítéshez weblekérdezésre, azt jelenti, ön akar tud hogyan viselkedni configure FBA SharePoint. Én nem sikerült megtalálni minden olyan információt, hogyan lehet engedélyezni az FBA-orientált ASP.NET-alkalmazás, hogy mi szükséges módon kommunikálni az SQL keresés.
Ennek kutatása során, mi újra olvasni ezt a cikket: Az ASP.NET megszemélyesítés
Több kutatás vezetett bennünket, hogy ezt a cikket codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
Hogy segített írni a kódot, amely már tartalmazott, alábbiakban. -A ' nem a leg--bb elegáns cucc, de ez munkás. Remélem Ön talál ez hasznos.
Itt van a kód, hogy együtt dolgozott velünk:
védett Érvénytelen btnSearchCarrier_Click(Tárgy, EventArgs e betű) { próbálja meg { ImpersonateUser iU = új ImpersonateUser(); // TODO: Cserélje ki a hitelesítő adatok iU.Impersonate("Tartománynév", "Jelszó", "Jelszó"); // KÓD // iU.Undo(); } fogási (Kivétel ex) { } } // Megszemélyesítés osztály említettek használatával. nyilvános osztály ImpersonateUser { [DllImport("advapi32.dll", SetLastError = igaz)] nyilvános statikus külső logikai LogonUser( Karakterlánc-lpszUsername, Karakterlánc-lpszDomain, Karakterlánc-lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] privát külső statikus bool CloseHandle(IntPtr fogantyú); privát statikus IntPtr tokenHandle = új IntPtr(0); privát statikus WindowsImpersonationContext impersonatedUser; // Ha ezt a kódot beépíteni a DLL-je, Győződjön meg róla, hogy a kereslet, hogy // FullTrust fut. [PermissionSetAttribute(SecurityAction.Demand, Név = "FullTrust")] nyilvános Érvénytelen megszemélyesítése(karakterlánc-tartománynév, karakterlánc-userName, karakterlánc, password karakterlánc) { próbálja meg { // A nem felügyelt LogonUser függvény segítségével a felhasználó tokent kap // a megadott felhasználó, tartomány, és a jelszó. CONST int LOGON32_PROVIDER_DEFAULT = 0; // Ez a paraméter átadás okoz LogonUser, hogy hozzon létre egy elsődleges token. CONST int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // Lépés -1 Hívja LogonUser egy hozzáférési tokent leírót beszerezni. bool returnValue = LogonUser( userName, Tartománynév, jelszó, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle); // tokenHandle - új biztonsági token Ha (hamis == returnValue) { int ret = Marshal.GetLastWin32Error(); Console.WriteLine("LogonUser hívás nem sikerült, hibakód: : " + RET); dobja új System.ComponentModel.Win32Exception(RET); } // Lépés - 2 WindowsIdentity newId = új WindowsIdentity(tokenHandle); // Lépés -3 impersonatedUser = newId.Impersonate(); } fogási (Kivétel ex) { Console.WriteLine("Kivétel történt. " + ex.Üzenet); } } /// <Összefoglaló> /// Megáll a megszemélyesítés /// </Összefoglaló> nyilvános Érvénytelen visszavonás() { impersonatedUser.Undo(); // Ingyenes a tokenek. Ha (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</vége>