Java Datenbankanwendung mit Anmeldung

CPU

Lieutenant
Registriert
Jan. 2006
Beiträge
704
Hallo,

folgende Situation: da ist ein MySQL-Server mit einer Datenbank, mit der das Java-Programm arbeiten soll. Dabei hat jeder Client das Java-Programm.

Nun zur Frage: wie kann man sich sinnvoll authentifizieren an der Datenbank?

Wenn ich eine Tabelle anlege, in der Benutzername + Passwort stehen, dann kann ich zwar mit dem Programm prüfen, ob die Nutzerdaten stimmen. Aber das Javaprogramm authentifiziert sich ja mit Datenbankbenutzer + Datenbankbenutzerkennwort. D.h. ein "Angreifer" kann sich die Werte nehmen und mit einem anderen SQL-Client die komplette Datenbank anschauen.

Ich müsste also eine sichere Authentifizierung und Rechtestruktur (d.h. nicht jeder darf jede Tabelle "sehen" etc.) hinbekommen. Wie macht man soetwas "professionell"?

Gruß,
mythbu
 
Das Programm darf die Logindaten für den DB Account nicht kennen. Diese muss der Benutzer kennen und sie bei jeder Benutzung eingeben.
 
Authentifikation ist doch Aufgabe deiner DB... wie wärs dann mit gesicherter Übetragung (https)?
 
Also normalerweise haben die Anwender nichts mit der Datenbank zu tun.
Wenn Du JPA ( Hibernate oder ähnliches ) bzw JDBC verwendest ist Authentifizierung eh quasi vorgegeben.
Irgendwo im Projekt gibt es da dann ein config file wo man die datasource ( deine Datenbank ) einstellt, oder Du hast einen Connectionstring jdbc::user:pass@dbip:port (so ähnlich ;) )

Aber schreib mal die "spec" von deinem Programm auf, könnte es sein das Du so eine Art SQL Editor basteln willst ?
 
Also, dass Programm ist ein "Grafischer Editor" für mehrere Tabellen. D.h. es werden Daten aus der Datenbank (bzw. Tabellen) angezeigt und diese können von manchen Benutzern verändert werden. D.h. manche Benutzer dürfen auf alle Tabellen lesen zugreifen, manche auf alle Tabellen lesend + schreibend und manche nur auf einige wenige Tabellen der Datenbank.

Eine weitere Anforderung ist es, dass Projekt so einfach wie möglich zu halten. D.h. ich habe auf einem entfernten Rechner einen MySQL-Server laufen, der von einem Java-Client angesprochen werden soll.

Wenn ich mich mit
Code:
DriverManager.getConnection("jdbc:mysql://192.168.100.1/test", "root", "secret");
an der Datenbank anmelde und dann mit
Code:
SELECT id FROM users WHERE name = 'USERNAME' AND password = 'USERPASSWORD'
prüfe, ob die Benutzerdaten des Benutzers richtig sind nützt mir das garnichts. Denn: der schlaue Nutzer kann sich dann mit einem SQL-Client und den Datenbankdaten ("root", "secret") an der Datenbank anmelden und meine Authentifizierung umgehen und alles ansehen und ändern (eben Clientseitige Authentifizierung). SCHLECHT! :(

Also müsste man irgendwie über das DBMS gehen und gleich an dieser Stelle die Benutzerdaten eingeben
Code:
DriverManager.getConnection("jdbc:mysql://192.168.100.1/test", "USERNAME", "USERPASSWORD");
und authentifizieren.

Aber da weiß ich nicht, ob folgendes mit MySQL geht (und wenn ja, wie?):

* Benutzer die MySQL-Benutzer erzeugen können
* Beschränkung von MySQL-Benutzern auf Lesen und Lesen+Schreib-Rechte
* Beschränkung von MySQL-Benutzern auf bestimmte Tabellen in einer Datenbank

Das wäre es so, was ich einfach realisieren muss. Dabei möchte ich keinen Layer mehr haben zwischen MySQL-Datenbank und Client.

Gruß,
CPU
 
CPU schrieb:
Wenn ich mich mit
Code:
DriverManager.getConnection("jdbc:mysql://192.168.100.1/test", "root", "secret");
an der Datenbank anmelde und dann mit
Code:
SELECT id FROM users WHERE name = 'USERNAME' AND password = 'USERPASSWORD'
prüfe, ob die Benutzerdaten des Benutzers richtig sind nützt mir das garnichts.
Genau, so nicht.

CPU schrieb:
Aber da weiß ich nicht, ob folgendes mit MySQL geht (und wenn ja, wie?):

* Benutzer die MySQL-Benutzer erzeugen können
* Beschränkung von MySQL-Benutzern auf Lesen und Lesen+Schreib-Rechte
* Beschränkung von MySQL-Benutzern auf bestimmte Tabellen in einer Datenbank
User erstellen geht so

Rechte vergeben so

Wenn dir das zu kompliziert ist per command, dann kannst du das auch gemütlich durch klicken z.B. per MySQL Workbench machen.
 
Zuletzt bearbeitet:
Genau, erstelle Dir die verschiedenen User direkt in der Datenbank und gib denen die Rechte !
Aber wieso machst Du sowas selbst (Klingt schwer nach einem Uni Beispiel :D ) ? http://www.dbvis.com/
 
Zurück
Oben