Thread Active Directory Abfrage (LDAP?) (10 answers)
Opened by Faldaar at 2007-09-28 17:39

Faldaar
 2007-09-28 17:39
#100136 #100136
User since
2003-11-05
14 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe das Problem, dass ich Benutzer aus einem AD (genauer aus 2 OUs in diesem AD) auslesen muss und prüfen ob diese Mitglied von bestimmten Gruppen sind (ca. 40 verschiedene Gruppen).

Ich habe bereits ein Perl Programm, das genau diese Funktion in einer NT4 Domäne erfüllt hat, mittels
Code: (dl )
1
2
use Win32::NetAdmin qw(GetUsers GroupIsMember FILTER_NORMAL_ACCOUNT);
use Win32API::Net;

Dazu wurden mit GetUsers alle Benutzer der Domäne abgefragt, per Iteration durchgegangen und für jede Gruppe mit der Funktion GroupIsMember geprüft ob der Benutzer in der Gruppe ist.

Das Programm an sich läuft auch in einer W2k3 Umgebung, ABER es fragt grundsätzlich alle Benutzer der Domäne ab (über 400) anstatt nur die aus den 2 OUs (ca. 190). Dadurch ist es natürlich entsprechend langsam (Laufzeit 180 Sekunden+).

Nun habe ich es schon etwas angepasst und lese die Benutzer per Net::LDAP aus den 2 OUs aus (unsere Anmeldenamen enthalten zum Glück keine Umlaute/Sonderzeichen), Rest ist wie gehabt. Dadurch hat sich die Laufzeit immerhin auf unter 110 Sekunden verkürzt, was ich immer noch extrem lang finde. Mein Ziel sind hier eher 30 Sekunden oder weniger, was aber wohl utopisch ist :)

Nun dachte ich, dass ich eventuell alles per Net::LDAP abfragen kann und dadurch Zeit gewinne, da stellen sich aber schon die ersten Probleme:
1.) Umlaute in den Gruppennamen
2.) get_value('memberOf') gibt leider den kompletten DN der Gruppe zurück. Ich habe zum vergleichen nur eine Liste der samAccountname der Gruppen.

Nun habe ich beim durchforsten des Forums bereits herausfinden können, dass ich das AD wohl auch (besser?) per Win32::OLE abfragen kann.
Kennt sich damit jemand aus und kann mir ein Codeschnipsel geben wie ich dort eine Liste alle Mitglieder einer OU und die Gruppenzugehörigkeit eines Benutzers Abfrage?

Danke
Martin

Edit: Alternative Lösungsvorschläge werden selbstverständlich auch gerne genommen. Glaube so langsam drehe ich mich hier eh grade im Kreis und seh den Wald vor lauter Bäumen nicht mehr.

Edit2: Die o.g. Laufzeiten sind bei Ausführung auf einem Client in der Domäne. Wird das Programm auf dem ADC ausgeführt verringern sich die Zeiten deutlich (ca. 50%).
Es ist schwieriger eine vorgefasste Meinung zu zertrümmern als ein Atom. (Albert Einstein)

View full thread Active Directory Abfrage (LDAP?)