FBA kaj SQLa Servilo: Ama Rakonto

Mia kolego estis laboranta sur araneaĵa parto en FBAa medio. Inter aliaj aferoj, La araneaĵa parto tiras kelkajn datumojn de SQLa servilo. La granda plano por ĉi tiu projekto postulas ke DBA formas datuman nivelon sekureco en SQL (Kiel oponita al embedding uzanta IDENTIGAĴO en SQLa demando aŭ kelkaj alia alproksimiĝo).

La problemo estas ke SQLa servilo ne scias ion ajn pri nia FBAa medio do ĝi ne povas fidi nin. Ni solvis ĉi tiun problemon de, Por manko de pli bona vorto, Mane impersonating ADa uzanto por ke ni povus konekti al SQL tia tiu SQLa datuma nivela sekureco laboroj.

Eĉ kvankam FBA estas ASPIDO.PURA ĉefaĵo, Ni SharePoint Naciaj homoj instruis la diversajn serĉajn motorojn ke se vi estas pridemandanta por FBA, Vi devas signifi vin deziri scii kiel formi FBA en SharePoint. Mi malsukcesis trovi trovi ajnan informon sur kiel ebligi FBA oriented ASPIDO.PURA apliko komuniki kun SQL en la vojo ni devis.

En la kurso esplori tion ĉi, Ni re-legita ĉi tiun artikolon: ASPIDO.PURA Impersonation

Pli da esploro gvidis nin al ĉi tiu codproject artikolo: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Kiu helpis nin skribi nian kodon, Kiu mi inkluzivis sub. Ĝi ne estas la plej eleganta aĵo, Sed ĝi laboris. Mi esperas vin trovas ĝin helpema.

Ĉi tie-a la kodo kiu laboris por ni:

Protektita Malplena btnSearchCarrier_Klako(Objekta sendinto, EventArgs e)
 {
 Provo
 {
 ImpersonateUser iU = Nova ImpersonateUser();
 // TODO: Anstataŭigi credentials
 iU.Impersonate("DomainName", "Salutnomo", "Pasvorto");

//
 KODO
//

 IU.Malfaras();
 }
 Kaptaĵo (Escepto eksa)
 {

 }
 }

// Uzanta Impersonation klaso kiel menciita sub.

Publika Klaso ImpersonateUser
 {
 [DllImport("Advapi32.Dll", SetLastError = Vera)]
 Publika Senmova Extern Bool LogonUser(
 Laĉi lpszUsername,
 Laĉi lpszDomain,
 Laĉi lpszPassword,
 Int dwLogonType,
 Int dwLogonProvider,
 Ref IntPtr phToken);

 [DllImport("Kernel32.Dll", CharSet = CharSet.Aŭtomobilo)]
 Privata Extern Senmova Bool CloseHandle(IntPtr anso);

 Privata Senmova IntPtr tokenHandle = Nova IntPtr(0);
 Privata Senmova WindowsImpersonationContext impersonatedUser;

 // Se vi inkluzivas ĉi tiun kodon en DLL, Esti certe postuli ke ĝi
 // Kuroj kun FullTrust.
 [PermissionSetAttribute(SecurityAction.Postulo, Nomo = "FullTrust")]
 Publika Malplena Impersonate(Laĉi domainName, Ŝnura salutnomo, Ŝnura pasvorto)
 {
 Provo
 {

 // Uzi la unmanaged LogonUser funkcion akiri la uzanton token por
 // La specifa uzanto, Domajno, Kaj pasvorto.
 Const Int LOGON32_PROVIZANTA_NEREPAGO = 0;

 // Pasanta ĉi tiun parametron kaŭzas LogonUser krei  primaran token.
 Const Int LOGON32_LOGON_INTERAKTIVA = 2;
 TokenHandle = IntPtr.Nulo;

 // Paŝo -1 Voki LogonUser akiri anson al aliro token.
 Bool returnValue = LogonUser(
 Salutnomo,
 DomainName,
 Pasvorto,
 LOGON32_LOGON_INTERAKTIVA,
 LOGON32_PROVIZANTA_NEREPAGO,
 Ref tokenHandle); // TokenHandle - Nova sekureco token

 Se (Falsa == returnValue)
 {
 Int ret = Direktanto.GetLastWin32Error();
 Regilaro.WriteLine("LogonUser vokas malsukcesita kun erara kodo : " +
 Ret);
 Ĵeti Nova Sistemo.ComponentModel.Win32Exception(Ret);
 }

 // Paŝo - 2
 WindowsIdentity newId = Nova WindowsIdentity(TokenHandle);
 // Paŝo -3
 ImpersonatedUser = newId.Impersonate();

 }
 Kaptaĵo (Escepto eksa)
 {
 Regilaro.WriteLine("Escepto okazis. " + Eksa.Mesaĝo);
 }
 }


 /// <Resuma>
 /// Haltigoj impersonation
 /// </Resuma>
 Publika Malpleno Malfaras()
 {
 ImpersonatedUser.Malfaras();
 // Liberigi la tokens.
 Se (TokenHandle != IntPtr.Nulo)
 CloseHandle(TokenHandle);
 }
 }

</Fino>

Aboni al mia blogo.

Technorati Etikedoj:

Unu pensis sur "FBA kaj SQLa Servilo: Ama Rakonto

  1. David Frue
    Mizera por poŝtanta ĉi tiun senrilatan demandon sed mi ne povus kalkuli ekstere kiel sendi vi retpoŝto de ĉi tiu blogo.
    Vi havis antaŭan poŝton kie vi proponis grandan vojon filtri bibliotekon vidi untagged datumo. Ĉu vi havas ajnaj pensoj kiel al kiel vi povus vidi liston de untagged dokumentoj en tuta dokumenta biblioteko? Uzanta senhoman kampon en altnivela serĉo ne revenas ajnajn rezultojn.
    Respondo

Lasi Respondon

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita *