Java & MySQL

Herli

Mitglied
Hi @ all

Ich würde gerne ein Bundesligatippspiel programmieren. Natürlich mit MySQL Datenbank. Dabei soll jeder Teilnehmer seinen eigenen Client bekommen. D.h. Die Datenbank müsste im www für jeden zu erreichen sein. Und da weiß ich nicht wie ich das realisieren kann. Wenn ich einen Webhoster nehme wie bepw. funpic, dann kann ich nur serverseitig (abgesehen davon, dass der nur für php vorgesehen ist) auf die Datenbank zugreifen... Gibts da andere Webhoster wo ich von meinen Rechner auf eine Datenbank im www ugreifen kann? Oder gibts da andere Mglichkeiten ohne gleich mit der serverseitigen Programmierung einzusteigen?
 
Hi,

ohne Dir jetzt gleich alle Hoffnungen zu nehmen, kann ich von mir behaupten keinen solchen Provider zu kennen (nicht im kostenlosen Sektor). Evtl. noch

http://www.freesql.org

Dort aber bitte zuerst die About lesen

Andere Möglichkeit, die Datenbank über einen eigenen Server anzubieten :-/

Mehr fällt mir im Moment leider auch nicht ein.

Gruß

Romsl
 
Ich möchte noch anmerken, dass es ein recht großes Gefahrenpotential ist, von den Clients aus direkt auf die Datenbank zuzugreifen.
Das bedingt, dass Du in der Client-Applikation das (ein) Datenbankpasswort verwendest. Diese ließe sich prinzipiell aus der Anwendung auslesen und kann dann für "freie" Datenmanipulationen verwendet werden.

Gruß hpvw
 
Das bedingt, dass Du in der Client-Applikation das (ein) Datenbankpasswort verwendest.

Dies ist doch nur der Fall, wenn das Passwort fest in der Anwendung "steht"!? Man kann ja auch eine Eingabe verlangen und dies dann Verschlüsseln. Oder liege ich da falsch?

Gruß

Romsl
 
Ja das geht, dann ist dem Client das Passwort aber auch bekannt um es in eigene Applikationen zu integrieren.
Um ein solches System vor Manipulationen zu schützen, sollte man sich sehr gut mit dem MySQL Access Privilege System auskennen, wenn es denn überhaupt die nötigen Konfigurationsmöglichkeiten bietet.

Gruß hpvw
 
Versteh immernoch nicht ganz was Du meinst? Vielleicht reden wir zwei ja auch aneinander vorbei. Ein leichtes wäre es ja auch Views zu generieren, Benutzer mit NUR SELECT und INSERT Privilegen versehen, etc.

Ich denke es gibt genügend Ansätze dies zu verhindern...
 
Wenn Du ihnen nur Select-Queries zugestehst und jeder alles (in den berechtigten Tabellen) sehen darf, gebe ich Dir Recht, dann ist das in Ordnung.
Bei dem angesprochenen Tippspiel sollte ein User aber sicher auch einen Tipp abgeben können, d.h. er benötigt Rechte für Insert-Queries, evtl. auch für Updates.
In einer normalisierten Datenbank gibt es sinnvollerweise eine Tabelle für die Tipps aller User.
Meines Wissens kann man mit der MySQL-Rechte-Verwaltung (zumindest vor Version 5, was da passiert ist weiss ich nicht) nicht sicherstellen, dass ein User nur Datensätze mit seiner ID bearbeiten und einfügen kann.
Wenn man beispielsweise ein Private-Nachricht-System betrachtet könnte man auch bei Select-Queries meines Wissens nicht sicherstellen, dass ein User nur seine Nachrichten lesen kann, es sei denn man denormalisiert die Datenbank und jeder User erhält seine eigene Tabelle für empfangene PNs. Dann könnte man aber immer noch nicht sicherstellen, dass ein User nur in seinem Namen PNs schreibt.

Ich lasse mich gerne eines Besseren belehren, wenn MySQL doch differenzierte Rechte an Zeilen, Spalten und deren Inhalten ermöglicht.

EDIT: Dank Romsls Idee mit Views zu arbeiten findet sich eine Lösungsmöglichkeit für MySQL 5.0.2 in Post 14.

Gruß hpvw
 
Zuletzt bearbeitet:
Wieso muss ich dass schützen? Ich würde den Teilnehmern ja nur eine jar-Datei (die besteht doch aus class-Dateien) oder einer exe zur Verfügung stellen... Natürlich hätten sie alle Rechte. Aber wie soll das möglich sein, das Passwort dort auszulesen?
 
Herli hat gesagt.:
Wieso muss ich dass schützen? Ich würde den Teilnehmern ja nur eine jar-Datei (die besteht doch aus class-Dateien) oder einer exe zur Verfügung stellen... Natürlich hätten sie alle Rechte. Aber wie soll das möglich sein, das Passwort dort auszulesen?
Das ist das geringste der Probleme:
WhatsInByteCode.java
Java:
package byteCode;

/**
 * 
 * @author HPvW
 */
public class WhatsInByteCode {
    private String pw="mypw1";
    
    public WhatsInByteCode() {
        this.connect();
    }
    
    private boolean connect() {
        String s="mypw2";
        System.out.println(this.pw);
        System.out.println(s);
        return true;    
    }
    
    public static void main(String[] args) {
        new WhatsInByteCode();
    }
}
WhatsInByteCode.class
Code:
Êþº¾


0

byteCode/WhatsInByteCode

java/lang/Object

pw
Ljava/lang/String;
<init>
()V
Code

mypw1

...

LineNumberTable
LocalVariableTable
this
LbyteCode/WhatsInByteCode;
mypw2

java/lang/System

out
Ljava/io/PrintStream;

...
(Der Auszug aus der Class-Datei ist natürlich etwas gekürzt, aber grundsätzlich ist es ein verhältnissmäßig kleines Problem, ein Passwort herauszufinden, was auf dem eigenen Rechner gespeichert ist und über die eigenen Netzwerkkarte versendet wird.)

Gruß hpvw
 
Zurück