![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
|
Folgende Situation ist gegeben: Ich habe nun ein Framework für ein verteiltes System (Client, der zu einem Server verbindet und mit ihm kommuniziert). Ich mache hierfür sowas ähnliches wie RMI. Das heisst:
Es gibt haufenweise Interfaces. Über diese Interfaces findet die Kommunikation statt. Wenn man also mit dem Server kommunizieren will, ruft man eine Methode auf. Auf dem Server eght die Nachricht ein und er ruft dann ggf. Daten ab und antwortet. Nun bin ich an dem Punkt, eine Berechtigungsprüfung einzubauen. Daraus ergibt sich die Frage: Wo ist das sinnvoll und zwar so, dass es sich auch leicht umsetzen lässt. Man könnte beispielsweise irgendwo eine Art Liste pflegen und eine Methode in den RMI-Interfaces mit einem ganz bestimmten Recht verknüpfen. Hat man das Recht, ist alles OK. Hat man es nicht, weist das Framework den Aufruf ab. Nun könnte man vielleicht auf der Datenbank Rechte einfügen, also sagen "Datensatz A ist öffentlich verfügbar, Datensatz B aber nur für Admins". Davon unabhängig soll eine Anwendung noch selber eigene Rechte abfragen können, die in keines der Schemata passen, also sozusagen eine manuellen Überprüfung durchführen. Ich hoffe, ich habe mich verständlich ausgedrückt und da man ja diverse Erfahrungen aus anderen Systemen, Betriebssystemen, Foren usw. hat, was da die beste und flexibelste Möglichkeit ist.
__________________
Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
|
|
|
|
|
Nach oben #2 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 625
|
Also die Datenbank-Rechte für soetwas zu benutzen ist glaube ich die komplizierteste Methode von allen, da bei jedem neuen Datensatz auch noch ein entsprechendes Recht vergeben werden muss. Zusätzlich muss für jede Gruppe von Benutzern ein Datenbank-Benutzer gepflegt werden, wenn nicht sogar für jeden Benutzer selbst und für jeden neuen Nutzer müssten dann alle Rechte aller Datensätze gesetzt werden. Macht das Sinn? Ich befürchte nein.
Die einfachste Methode ist wahrscheinlich bei jedem Aufruf als erstes eine Art SessionID zu übergeben, anhand der die Validität der Abfrage überprüft wird (gegebenenfalls noch zusätzlich mit einer Prüfsumme, die ebenfalls übergeben wird). Wie solche Sicherungsmechanismen funktionieren ist glaube ich weitgehend bekannt, zumindest wenn man sich in PHP schonmal mit Login-Systemen beschäftigt hat.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
|
|
|
|
|
Nach oben #3 | |
|
Erfahrener Benutzer
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
|
Nein, ich will keine Datenbank-Rechte nutzen, die beispielsweise MySQL bereitstellt. Vielleicht hätte ich etwas mehr ausholen müssen. Es handelt sich ja um Java. Der Server sieht vor, dass wir eine Reihe aus Datenbankelementen haben; das sind ganz normale Java-Klassen bzw. Java-Objekte, kein SQL oder sowas. Was ich nun erreichen würde ist einfach ein Schutz, also die Möglichkeit, bequem im Java-Code (z.B. via Annotations) zu definieren: Diese Methode des Datenobjektes ist geschützt und man braucht ein Recht um sie aufzurufen.
Zitat:
Beispiel: Ich habe ein Interface "ChatChannel". Dies hat eine Methode "sendMessage" und eine Methode "kickPlayer". Durch Aufruf der Methoden findet Netzwerkkommunikation statt und ich lande auf dem Gameserver. Der Gameserver holt sich ein Datenobjekt "ChatChannelInfo" und guckt dort, wer im Chat-Raum ist und an wen es die Nachricht weiterleiten muss. Nun kann man ja theoretisch dem ramework sagen "Methode kickPlayer()" muss geschützt sein. Das Framework nimmt die Arbeit ab und prüft (wie auch immer). Reicht das vom Ansatz her für alle denkbaren Zwecke?
__________________
Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
|
|
|
|
|
|
Nach oben #4 |
|
Erfahrener Benutzer
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 491
|
Über dieses Thema hab ich mir auch schon mal Gedanken gemacht, allerdings bin ich aus Zeitgründen noch nicht dazu gekommen, das praktisch umzusetzen.
Die Methode, mit der die Rechte überprüft werden, ist zwar an sich nicht soo wichtig, das geht über Annotations (da fehlen mir aber auch Kenntnisse von) oder prinzipiell ne Abfrage direkt in der Methode (ok, das wäre recht unsauber). Ne weiter Möglichkeit wäre ein zentrale Rechtekontrollstelle, dass das Framework also zunächst überprüft, ob der User die Rechte dazu besitzt und dann erst die Methode aufgerufen wird. Mit "eigenen Rechten" meinst du jetzt spezielle Anwendungsfälle, die von der implementierenden Software angelegt werden (z. B. die Berechtigung, einen Player zu kicken) und nicht, dass ein User (Admin) komplett eigene Rechte erstellen kann (das wäre nämlich schwierig umzusetzten...). Also die Rechte müssten schon im Code vorliegen. Ich denke mal, es geht (bei einem größeren Umfang) nichts daran vorbei, eine lange Liste von allen möglichen Berechtigungen zu haben, die u.U. benötigt werden, um Aktionen durchzuführen. Im kleineren Masstab kann man auch direkt Berechtigungen für einzelne Aktionen vergeben, aber irgendwann wird das zu aufwändig. Dann muss zentral, per Annotation oder wie auch immer einer Aktion die dafür nötigen Berechtigungen zugewiesen werden.
__________________
Weißt Bescheid - Scheiß wie weit |
|
|
|
|
|
Nach oben #5 |
|
Erfahrener Benutzer
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
|
Die Rechte selbst kann man ja hierarchisch in einem Baum anordnen. So dass man Bereiche bildet. Rein vom administrativen Aufwand ist das besser, da man dann zwar alles bis ins Detail steuern könnte, aber kan mann auch als Admin einen kompletten Bereich berechtigen.
Und ich meine schon, dass die Rechte selbst von der Anwendung vorgegeben werden, alles andere ist relativ schwierig und nicht immer macht es Sinn, direkt an einer beliebigen Methode ein Recht setzen zu wollen.
__________________
Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|