# Praktikumsarbeit: Zugriff Active Directory/Server/Datenbank



## PELLE (29. Mrz 2007)

Hallo,

ich muss eine Praktikumsarbeit schreiben. Zeit die zur Verfügung steht: 5 Monate April - August.

Ich werde jetzt hier ne ganze Latte/Fragen schreiben, da ich nicht den Fehler begehen will, nach 4 Wochen festzustellen, dass ich von vornherein eine andere Schnittstelle/Bibliothek hätte benutzen sollen. Daher bitte ich um Ratschläge die begründet sind bzw. am Besten auch schon in der Praxis erprobt wurden. 

Ich mache ein Praktikum in einer Firma zuständig für das Netzwerk an das 17 Schulen ca. 8000 Lehrer + Schüler(Domänenbenutzer) angeschlossen sind. Das ganze nennt sich Campus Netz.


Meine Aufgaben:

*Must-Have Aufgabe:*

1.) Fall: Lehrer oder Schüler vergisst sein Kennwort:

Aufgabe: Kennwort von Lehrern/Schülern zurücksetzen nur von einem EDV-Lehrer der in der Gruppe "EDVLehrer" und der Gruppe "spec" ist. 

2.) Fall: Schüler zieht um von einer Schule (Schulausschluss z.B.) oder von einer Klasse zu einer anderen Klasse (normaler Vorgang am Schuljahresende z.B.)

Aufgabe: Die bestehenden Berechtigungen von Schülern auf den alten Klassen- und Schulordnern löschen. Neue Berechtigungen werden wiederum geschrieben in Profiles$ + Home$. Diese werden wiederum geschrieben in den Schüler "X" bzw. Domänenbenutzer  (EDSAlleSchueler und EDS7A). Zuvor meldet der Lehrer sich an mit Username und Kennwort und anhand in welcher Schule der Lehrer sich befindet ist auch nur der Zugriff auf die Datenbankf ür diese Schule gestattet.

EDS ist die Abkürzung für Eichendorfschule 


*Nice-to-Have Aufgabe:*

1.) Fall: Komplett neue Schüler die bisher nicht im Campus Netz vorhanden sind müssen in die Domäne aufgenommen werden.

Aufgabe: Ein Lehrer der in einer Datenbank vorhanden ist, soll sich mit seinem Namen und Passwort anmelden. Nur wenn der Name und Passwort des Lehrers mit dem Namen und Passwort in der Datenbank übereinstimmen ist er eingeloggt und kann neue Schüler (Name, Vorname,Geburtsdatum,Schule,Klasse) der Active Directory bzw. Domäne hinzufügen.

2.)  Für statistische Zwecke benötigt man eine grafische Auswertung (z.B. Balkendiagramm) wie häufig es Schulumzüge, Klassenumzüge und ein Vergessen des Passworts der Lehrer/Schüler etc... gab.

3.)  Während z.b. die Berechtigungen für die Schüler neu geschrieben werden auf die active Directory würde ich gerne eine Art JProgressBar instanziieren  dass der Benutzer keinen Wartekoller bekommt.




*Betriebssystemtechnische Vorraussetzungen schaffen:*

Aus Sicherheitsgründen wird das Programm auf 2 PCs erstmal getestet. 1 PC ist der Windows xp Client, der andere bekommt Windows 2000 Server drauf.

Gibt es Probleme hinsichtlich Windows 2000 (server) edition und dem Java Programm bzw. den Schnittstellen/Bibliothken die ich benötige werde ?

*
Programmiertechnische Vorraussetzungen schaffen:*

Welche Schnittstellen/Bibliotheken benötige ich um obige Aufgaben zu bewältigen und für was welche Schnittstelle?

Ich habe zur Auswahl:

http://www.openldap.org/jldap/ 

Diese Bibliothek würde mir die ganzen Zugriffe wie Rechts setzen und neuen User erschaffen erlauben nicht ?

oder 2.) http://java.sun.com/products/jndi/tutorial/trailmap.html 

oder 3.) http://j-integra.intrinsyc.com/supp...es/Creating_an_NT_User_via_ADSI_from_Java.htm


Da ein Laie auf dem Gebiet bin, kann ich auch nicht beurteilen/differenzieren welches der obigen 3 Schnittstellen die geeignetste ist.

Ic bitte um Ratschlag!

Weiterhin würde ich gerne wissen ob es sinnvoller ist ob jeder EDV Lehrer an einer der 17 Schulen dieses Java admin tool bekommt oder ob es auch möglich oder villeicht besser ist dass alle 17 EDV Lehrer auf eine Internetadresse zugreifen können wo eine per Login geschützte eingabemaske ist etc... und jeder Lehrer dort die änderungen vornimmt und dieses eine Programm auf einem Server die Active Directory der Campus Domäne verändert etc.

Das ganze sollte natürlich abgsichert sein vllt. Stichwort SSL zugriff oder so habe davon wenig Ahnung , auch da würde ich mich über einen Rat freuen von euch.

So , wenn Ihr noch Fragen habt, fragt sie einfach. Erfahrung mit grafischer Ausgabe, Datenbank auslesen und suche und Transferleiste habe ich schon. Allerdings 12 Monate her 

Ich benutze MyEclipse 5.1.1 GA und Java JDK 6.


----------



## Guest (30. Mrz 2007)

Habe mal vor einigen Monaten eine AD integration in eine DB gemacht via Ldap.
Bin mit Spring Ldap recht gut gefahren. Es war einiges bequemer als JNDI.
Musste da nur lesend auf das AD zugreifen. Weiss nicht ob das mit Passwort
schreiben geht? Jedenfalls lesen von PW via Ldap --> no Change! afaik
ändern und solche Dinge waren kaum ein Problem obwohl ich es nicht gebaucht habe
(nur so testen aus Spass)
War ein 2003 Server und eine recht schnelle angelegenheit
(import von 500 Usern ruck-zuck ?1s? (ohne DB weiterverarbeitung)
Ich war zufrieden mit Spring Ldap
http://www.springframework.org/ldap

Ein in Java geschriebenes Programm zum rumspielen:
http://www-unix.mcs.anl.gov/~gawor/ldap/

Vielleicht hilfts dir ein wenig


----------



## AlArenal (30. Mrz 2007)

Anonymous hat gesagt.:
			
		

> Jedenfalls lesen von PW via Ldap --> no Change!



Warum sollte sich beim Lesen des Passworts dieses auch ändern?


----------



## m@nu (30. Mrz 2007)

btw: ich denk jetzt mal, da is chance gemeint gewesen...


----------



## AlArenal (30. Mrz 2007)

m@nu hat gesagt.:
			
		

> btw: ich denk jetzt mal, da is chance gemeint gewesen...



Du meinst "Schangse"?


----------



## PELLE (31. Mrz 2007)

> Habe mal vor einigen Monaten eine AD integration in eine DB gemacht via Ldap.
> Bin mit Spring Ldap recht gut gefahren. Es war einiges bequemer als JNDI.
> Musste da nur lesend auf das AD zugreifen. Weiss nicht ob das mit Passwort
> schreiben geht? Jedenfalls lesen von PW via Ldap --> no Change! afaik
> ändern und solche Dinge waren kaum ein Problem obwohl ich es nicht gebaucht habe



Du schreibst verwirrend was geht denn jetzt und was nicht?



> (nur so testen aus Spass)
> War ein 2003 Server und eine recht schnelle angelegenheit
> (import von 500 Usern ruck-zuck ?1s? (ohne DB weiterverarbeitung)
> Ich war zufrieden mit Spring Ldap
> http://www.springframework.org/ldap



Mein Probleme ist z.B. folgendes:

Was genau benötige ich um von einem client pc auf die active directory eines w2k servers zuzugreifen. Ich möchte ja nicht nur lesezugriffe machen sondern wenn das Passwort zurückgesetzt ist muss ja auch ein neues musterpasswort wie "123456" vergeben werden. Dieses kann der schüler wieder ändern in sein eigenes wie er es will, indem er sich mit 123456 anmeldet am pc und es sogleich ändert.  Sprich ich muss auch Schreib zugriffe machen.

Das 2. Problem ist das löschen der Rechte des domainusers und das neue setzen der Rechte. Zudem soll auf dem client pc erstmal alle kompletten klassen in eine datenbank eingelesen werden von der schule in der sich der lehrer befindet(wird beim einloggen festgestellt und danach hat er auch nur zugriff auf die klasseen seiner schulej). danach werden die rechte der schüler in der datenbank auf dem lehrerpc gelöscht in Klasse7a z.B. und neu gesetzt auf den ordner Klasse8a auch in der DAtenbank(damit der lehrer immer aktuell ist) ERST danach wird die Veränderung in der Datenbank zurückgeschrieben in die active directory des w2k servers.




> Ein in Java geschriebenes Programm zum rumspielen:
> http://www-unix.mcs.anl.gov/~gawor/ldap/
> 
> Vielleicht hilfts dir ein wenig



1.) Was meinst du soll mir helfen das selber geschriebene Programm ?

2.)
Wenn du denkst das Spring ldap das richtige ist für mich , gibt es ein deutsches buch darüber? Die Bücher die man unter amazon.de findet haben alle ne schlechte Bewertung 

Benötige Ich Hibernate für das was ich vorhabe? (auch wenn ich nicht wirklich weiß was das ist sondern nur aufgeschnappt habe ;-P ) Weiterhin frage ich mich ob ich das spring framework 2.0 benötige? Habe mal die changelog gelesen... doch dieses it english ist schon heftig... Muss ich mir nicht auch Gedanken über Protokolle machen? Wie der Zugriff auf die AD des w2k servers erfolgt? oder regelt das spring ldap für mich? Muss ich etwas auf dem Server installieren?

Wenn du skype oder icq oder Telenummer hast würde ich mich freuen, denn dann könnte ich 60 minuten komprimiert fragen stellen. Als Gegenleistung biete ich dir html,css,flash,3d und 2d kenntnisse an 1. güte. Falls du ne Homepage hast oder so die man etwas aufpeppen könnte ;-)


----------



## PELLE (3. Apr 2007)

Niemand??? 

Muss ich denn auf dem w2k server etwas installieren , dass ich mich dort anmelden kann etc.??? z.B. JAAS dass ich wo aufgeschnappt habe im google?


----------



## Der Müde Joe (3. Apr 2007)

oben hat jemand Spring Ldap erwähnt


```
LdapContextSource c = new LdapContextSource();
c.setUrl(url);
c.setPassword(password);
c.setUserName(user);
c.setBase(base);
try{
	c.afterPropertiesSet(); //auth
}
catch(Exception e){}

LdapTemplate ldapTemplate = new LdapTemplate(c);
ldapTemplate.setIgnorePartialResultException(true); //WIN Server Problem

AndFilter and = new AndFilter();
and.and(new EqualsFilter("objectclass", "person"));

SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.ONELEVEL_SCOPE);

List<Map<String,String>> myList = ldapTemplate.search("dc=hallo,dc=com",and.encode(),sc.getSearchScope(),new MyMapper());

class MyMapper implements AttributesMapper {

//hier kommen die Attribute von der Suche durch
public Map<String,String> mapFromAttributes(Attributes attr) {
return myMappings;
}

}
```

so würde eine Abfrage bei SpringLdap aussehen
die Authentifizierung läuft dabei über den Context
c.set..()  sind eine Person im AD

soviel ich weiss ist Ldap ein auf lesen optimiertes Protokoll, also nicht sehr
geeignet für viele Änderungen schreiben
MS ist zwar was sicherheit anbelangt nicht sehr gut, aber meines wissen
ist das PW write-only....vielleicht lässt es sich also überscheiben
vielleicht mit modifyAtrtibutes()

hilft dir vielleicht ein wenig
greets


----------



## KSG9|sebastian (3. Apr 2007)

Ein gescheites deutsches Buch wirst du nicht finden. Ich glaub nicht dass du überhaupt igendein akzeptables Buch findest, da der Zugriff auf LDAP nur sehr "wenig" ist und nicht reicht um ein Buch sinnvoll damit zu füllen.
Ach ja, wie in fast jedem Thema:
Wenn du programmieren willst dann lern Englisch.


----------



## PELLE (3. Apr 2007)

KSG9|sebastian hat gesagt.:
			
		

> Ein gescheites deutsches Buch wirst du nicht finden. Ich glaub nicht dass du überhaupt igendein akzeptables Buch findest, da der Zugriff auf LDAP nur sehr "wenig" ist und nicht reicht um ein Buch sinnvoll damit zu füllen.
> Ach ja, wie in fast jedem Thema:
> Wenn du programmieren willst dann lern Englisch.



ein deutsches Java buch 240 seiten über LDAP!

http://www.amazon.de/LDAP-Java-Entw...7042442?ie=UTF8&s=books&qid=1175602745&sr=8-1

Wer sagt denn dass ich kein englisch kann?  

Übersetz und versteh das bitte mal: 


> Package org.springframework.aop
> * introduced AfterAdvice marker, as super-interface of AfterReturningAdvice and ThrowsAdvice, for reduced coupling
> * exposed "invocableClone()" and "setUserAttribute"/"getUserAttribute" on ProxyMethodInvocation, for reduced coupling
> * introduced TargetClassAware interface, extended by Advised, and framework-decoupled "AopUtils.getTargetClass" method
> ...



Und alles verstanden? Wenn ja , dann liegts mit Sicherheit nicht an deinen English sondern Java Kenntnissen.


----------



## PELLE (3. Apr 2007)

Der Müde Joe hat gesagt.:
			
		

> oben hat jemand Spring Ldap erwähnt
> 
> 
> ```
> ...



Vielen Dank dir, mir gehts noch viel mehr darum was muss auf meinem Entwicklungs-client isntalliert sein außer Java und was benötigt mein test w2k server damit er die anfrage von dem client überhaupt annimmt, dass der client sich einloggen will und auf die AD zugreifen kann. Mir wurde gesagt ACEGI security sei das richtige, andere sagen ich müsste einen ldap server installieren auf dem w2k server etc etc... alles sehr vewirrend aber keiner hat handfeste argumente...


----------



## Der Müde Joe (3. Apr 2007)

Viele Wege führen nach ROM

Grundsätzlich reicht ein User auf dem AD über den auf
das AD zugegriffen wird (wieviel Rechte der hat ist ein anders Thema)

ZB
Username = Ldap User
Password = password

url = ldap://192.168.1.30:389/
base = dc=hallo,dc=com

auf dem AD wird der User angelegt.
mit dem code oben sollte es schon gehen
das AD abzufragen....
halt ohne ACEGI aber das gibt da bei SPring auch

EDIT:
bugfix and enhancement release von AspectOP ist vielleicht nicht die
richtige Lektüre zu beginn


----------



## PELLE (3. Apr 2007)

Der Müde Joe hat gesagt.:
			
		

> Viele Wege führen nach ROM
> 
> Grundsätzlich reicht ein User auf dem AD über den auf
> das AD zugegriffen wird (wieviel Rechte der hat ist ein anders Thema)
> ...



AOP davon weiß ich noch gar nix -und ist vllt. auch besser so...-


Und du meinst mit Spring LDAP kann ich die authentifizierung machen an dem server etc. und damit in die AD schreiben und lesen usw. ??? Ohne Acegi Security ?

Was benötige ich denn auf dem w2k server für software? Muss ich eine LDAP Anwendungs server wie OpenLDAP installieren(falls das stimmt was ich gerade sage...)?

http://de.wikipedia.org/wiki/Aop  ???????????

Was hälst du von diesem Vorschlag der mir auf spring ldap forum gemacht wurde?:



> Back to your problem:
> 
> 1. You want to restrict authentication to users that belong to a certain group in Active Directory.
> 
> ...





> EDIT:
> bugfix and enhancement release von AspectOP ist vielleicht nicht die
> richtige Lektüre zu beginn



Was meinst du damit?


----------



## Der Müde Joe (4. Apr 2007)

Spring Ldap kann sowohl mit ACEGI als auch ohne...
wie es dir am liebsten ist.

Eine gute Antwort hast du ja bereits von den Springern, Springanern 
Spring Ldap macht die Arbeit (alternativ JNDI)
ACEGI die Authetifikation....
(halt ein Prototyp/Proof of Concept machen)

zu AOP

du hast geschrieben du versteht das in English nicht:
1. Aspect Orient Progr. hat nichts mit AD zu tun (oder Ldap oder...)
  (http://de.wikipedia.org/wiki/Aspektorientierte_Programmierung)
2. Realese Changes und Bugfixes sind kaum Lektüren zum etwas lernen

was für Software auf dem 2000 Server:
?
so was es halt 08.15 drauf hat...nicht spezielles denke ich mal...
wird wohl eine Weile gehen einen DC (DomainController) mit AD und was
da noch alles dazugehört einzurichten...


----------



## KSG9|sebastian (4. Apr 2007)

Das war doch nicht böse gemeint 
Und wie gesagt, Bugfixed und Release Notes sind echt keine gute Lektüre. Ich hab damit nur gemeint dass im regelfall die Englische Dokumentation ausführlicher und besser ist als die Deutsche Übersetzung


----------



## PELLE (4. Apr 2007)

KSG9|sebastian hat gesagt.:
			
		

> Das war doch nicht böse gemeint
> Und wie gesagt, Bugfixed und Release Notes sind echt keine gute Lektüre. Ich hab damit nur gemeint dass im regelfall die Englische Dokumentation ausführlicher und besser ist als die Deutsche Übersetzung



ok dann habe ich dich missverstanden :wink: 

Mir ist ne .de java übersetzung meist lieber als englisch original auch wenn ich viele ausländische www freundschaften pflege seit jahren. Bin halt schwabe  :bae:


----------

