Passwort aus DB auslesen

Status
Nicht offen für weitere Antworten.

Antoras

Top Contributor
Hallo,

ich würde gerne für einen Loginmanager einen Benutzernamen und das dazugehörige Passwort aus einer Datenbank auslesen. Der Benutzername funktioniert auch, nur das Passwort nicht und ich versteh nicht warum. Die Kommandos zum Auslesen:
Java:
char[] correctPassword = null;
String pass = String.valueOf(password);
String checkPassword = "SELECT password FROM" + USER +
	"WHERE password='" + pass + "'";
Statement s = connection.createStatement();
ResultSet r = s.executeQuery(checkPassword);
			
while (r.next()) {
	System.out.print(r.getString(1) + " || ");
	System.out.println(r.getString(2));
	correctPassword = r.getString(2).toCharArray();
}
Der erste Wert wird ohne Probleme ausgelesen, nur beim zweiten bekomm ich die Fehlermeldung, dass der Wert nicht existiert. Das tut er aber definitiv.
Kurioserweise kann ich mit diesem String
Java:
String show = "SELECT * FROM" + USER;
alle Daten auch auslesen.
Was stimmt mit dem String checkPassword nicht?

Was anderes: Momentan lese ich das Passwort aus einem JPasswordField als char-Array aus. Das richtige Passwort wird als String aus der Datenbank ausgelesen, dann in ein char-Array umgewandelt und dann auf Gleichheit überprüft. Ist das sinnvoll? Oder gibt es da bessere Vorgehensweisen?
 

Schandro

Top Contributor
Java:
String checkPassword = "SELECT password FROM" + USER +
    "WHERE password='" + pass + "'";
Entweder hab ich grad en Denkfehler, oder dieses Query ist Schwachsinn.

Das Query ist so als würdest du fragen: "Hey Tim Mälzer, wie heißt du?"
 

sparrow

Top Contributor
Was der Schandro dir damit sagen will:

du suchst in der Tabelle "User" nach dem Passwort. Bringst es aber überhaupt nicht mit dem Benutzernamen in Verbindung.

In diesem Codestück greifst du auf 2 Spalten der Abfrage zu:
Java:
    System.out.print(r.getString(1) + " || ");
    System.out.println(r.getString(2));

Mit dieser Abfrage fragst du aber nur 1 Spalte ab:
Java:
String checkPassword = "SELECT password FROM" + USER +
    "WHERE password='" + pass + "'";

Die Fehlermeldung hat recht, da gibbet keine 2. Spalte.


Übrigens: Ich persönlich finde es 'angenehmer' einfach zählen zu lassen auf wie viele Tupel Name und Passwort zutreffen. >0 ist dann eine entsprechend gültige Kombination.


Gruß
Sparrow
 
S

SlaterB

Gast
> "SELECT password FROM" + USER + "WHERE password=...

ganz allgemein unabhängig von der Anwendung:
wenn hier nicht USER links + rechts Leerzeichen enthält, explodiert ein Atomkraftwerk,
viel einfacher und sicherer ist

"SELECT password FROM " + USER + " WHERE password=...

für ALLE Queries merken, auch bei der nächsten, SELECT * FROM...
 

ARadauer

Top Contributor
explodiert ein Atomkraftwerk,
ah darum der hinweis in der jdk lizenz...

generell:
1. query mal auf die konsole ausgeben lassen
2. das quer mit phpmyadmin oder sonst einem sql tool ausführen... was kommt da?
3. was hat die passwort spalte für einen datentyp?
 

Antoras

Top Contributor
Das Query ist so als würdest du fragen: "Hey Tim Mälzer, wie heißt du?"
Hab das jetzt zu SELECT * FROM geändert. Macht anders echt keinen Sinn.

Ich persönlich finde es 'angenehmer' einfach zählen zu lassen auf wie viele Tupel Name und Passwort zutreffen. >0 ist dann eine entsprechend gültige Kombination.
Stimmt, macht mehr Sinn. Die nachfolgende Überprüfung ob die Passwörter übereinstimmen bringt nichts. Aber wie frag ich am besten ab, ob die Logindaten >0? Mit einer Funktion direkt in SQL?

wenn hier nicht USER links + rechts Leerzeichen enthält, explodiert ein Atomkraftwerk,
Diesem Fehler bin ich glücklicherweise schon begegnet. Hab ihn mit dem Debugger bemerkt. Hab das aber eher so gelöst, dass ich vor und nach dem String USER direkt ein Leerzeichen angehängt hab. So muss ich nicht jedes Mal nachgucken ob ich die Leerzeichen jetzt in den String eingebaut hab. :D

was hat die passwort spalte für einen datentyp?
String (varchar)

Hab meine Methode zum Einloggen jetzt soweit geändert:
Java:
public boolean isLoginCorrect(String userName, char[] passWord) {
	boolean isCorrect = false;
	String pass = String.valueOf(passWord);
	String login = "SELECT * FROM" + USER +
			"WHERE username='" + userName + "'" +
			"AND password='" + pass + "'";
	
	try {
		Statement s = connection.createStatement();
		ResultSet r = s.executeQuery(login);
		
		while (r.next()) {
			if (s.execute(login)) {
				isCorrect = true;
			}
		}
		
		s.close();
	} catch (SQLException e) {
		ExceptionHandler.logCriticalException(e.getLocalizedMessage());
	}
	
	return isCorrect;
}
Das Einloggen geht jetzt. Das Problem ist nur, dass ich jetzt zwei mal eine Anfrage an die DB starten muss. Ist natürlich Blödsinn. Aber mir fällt gerade irgendwie keine bessere Lösung ein. Hat jemand einen Vorschlag?
 

sparrow

Top Contributor
1. Bau die Leerzeichen in die Query und nicht an einen Teilstring. Du siehst, dass bringt andere Leute die deinen Code lesen nur durcheinander.
2. Schau bei Gelegenheit PreparedStatements, das ist in diesem Fall aber unnötig und an dieser Stelle nur als Lernhinweis gedacht.
3. Der SQL-Befehl count gibt dir die Anzahl der Zeilen einer Abfrage zurück. SQL COUNT

Es ist auch in deinem aktuellen Code nur eine Abfrage nötig, die Abfrage während du das ResultSet durchläufst ist unnötig.
 
Zuletzt bearbeitet:

Antoras

Top Contributor
1. Bau die Leerzeichen in die Query und nicht an einen Teilstring. Du siehst, dass bringt andere Leute die deinen Code lesen nur durcheinander.
Ok. hab es geändert.

2. Schau bei Gelegenheit PreparedStatements, das ist in diesem Fall aber unnötig und an dieser Stelle nur als Lernhinweis gedacht.
Werde ich mir mal vormerken...

3. Der SQL-Befehl count gibt dir die Anzahl der Zeilen einer Abfrage zurück. SQL COUNT
Hab das mit dem COUNT jetzt hinbekommen. Aber jetzt kann ich Benutzername und Passwort ja nicht einander zuordnen. Es könnte ja sein, dass es mehrere gleiche Passwörter gibt. Benutzernamen nicht, das überprüf ich vor dem Anlegen, aber bei den Passwörtern, macht das Überprüfen ja keinen Sinn.
Also etwas in der Art:
Code:
SELECT COUNT(*) FROM user WHERE username='test' AND password='test'
Kann man das mit COUNT auch nur mit einem Kommando realisieren?


Es ist auch in deinem aktuellen Code nur eine Abfrage nötig, die Abfrage während du das ResultSet durchläufst ist unnötig.
Stimmt, für die Abfrage brauche ich die Schleife gar nicht...dafür jetzt aber für das COUNT
..
 

sparrow

Top Contributor
Kann man das mit COUNT auch nur mit einem Kommando realisieren?

Das ist doch nur 1 Kommando?

Java:
SELECT COUNT(*) FROM user WHERE username='test' AND password='test'

Machst doch alles richtig. Ein Kommando das prüft ob es einen Eintrag mit dem Namen und dem Passwort gibt.
 

Antoras

Top Contributor
Hm, das Kommando geht ja wirklich. Heute Nacht ging es nicht. ka was ich da gedacht bzw. falsch gemacht hab ???:L

Aber jetzt geht ja alles.

Danke für eure Antworten. Wart mir eine große Hilfe. :applaus:
 

xote

Mitglied
Ist es eigentlich richtig, wenn man passwörter in die DB schreibt? Im Normalfall nehme ich immer Abstand davon, aber vielleicht gibt es ja gute Gründe dafür.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P MySQL- Neues Passwort Datenbankprogrammierung 1
K Wie speichere ich das DB Passwort richtig ab? Datenbankprogrammierung 19
M MySQL Passwort Clientseitig ändern und über Button ausführen Datenbankprogrammierung 0
K Passwort und SQLDeveloper Datenbankprogrammierung 4
A MongoDB Passwort Problem Datenbankprogrammierung 0
R DB2 Oracle 12 - invalid username/passwort Datenbankprogrammierung 1
eskimo328 Datenbankverbindung ohne Passwort im Quelltext bei einer offline Anwendung Datenbankprogrammierung 14
S Java/Hibernate: DB-Passwort ändern Datenbankprogrammierung 4
G PostgreSQL Postgre: Passwort eines Benutzers ändern Datenbankprogrammierung 3
K H2 Datenbank Passwort durch Benutzer festlegen Datenbankprogrammierung 7
T XAMPP MySQL-Passwort Datenbankprogrammierung 3
M Passwort eines Technischen Users hinterlegen Datenbankprogrammierung 6
V DatenBank mit Login und Passwort Datenbankprogrammierung 4
M Datenbankanbindung - Passwort schützen Datenbankprogrammierung 6
J mal wieder passwort im code. Datenbankprogrammierung 6
S Passwort MySQL oder JAVA? Datenbankprogrammierung 4
M Passwort im Quellcode angeben? Datenbankprogrammierung 11
L JPA EclipseLink PostgreSQL auslesen mit Query Datenbankprogrammierung 2
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
L Oracle Oracle Datumsspalte auslesen Datenbankprogrammierung 5
A Umsätze der Bank auslesen Datenbankprogrammierung 7
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
F Auslesen einer .dbf-Datei, Zuordnung Index Datenbankprogrammierung 0
NIckbrick MySQL Befehle aus Datenbank auslesen Datenbankprogrammierung 21
H In hibernate.cfg.xml schreiben und auslesen Datenbankprogrammierung 0
L MySQL ResultSet vollständig auslesen Datenbankprogrammierung 20
K SQLite Datenbank in App integrieren: Vor Auslesen schützbar? Datenbankprogrammierung 6
K Java Datenbank auslesen Datenbankprogrammierung 8
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
J Onlinedatenbank einmalig auslesen Datenbankprogrammierung 1
E Wie kann ich textdateien, die als BLOB abgespeichert sind, aus der Datenbanktabelle auslesen? Datenbankprogrammierung 23
C MySQL Datenbank auslesen/beschreiben und Zusatz Datenbankprogrammierung 1
R MySQL Blob aus DB auslesen und einer Tabelle ausgeben Datenbankprogrammierung 7
E primaryKey auslesen - Datensätze abgleichen Datenbankprogrammierung 4
N SQL-Statement Auslesen des Resultset wird immer langsamer Datenbankprogrammierung 6
R MS-Access mit JAva auslesen Datenbankprogrammierung 7
2 MySQL Daten aus einer Array auslesen und MySQL Statment erstellen. Datenbankprogrammierung 5
E Tabellen nacheinander auslesen Datenbankprogrammierung 10
N HSQLDB Daten Auslesen Datenbankprogrammierung 3
E Werte auslesen Datenbankprogrammierung 3
O Metadaten / DatenbankAttribute Auslesen Datenbankprogrammierung 4
D Alle Werte aus DB auslesen und in Chart darstellen Datenbankprogrammierung 6
Ollek Auslesen DatenbanktabelleDatei iSeries Datenbankprogrammierung 10
C H2 Letzten Eintrag auslesen Datenbankprogrammierung 6
D MySQL Bild aus DB auslesen und auf FTP Speichern Datenbankprogrammierung 7
N Oracle txt. Datei auslesen-> verändern-> einlesen Datenbankprogrammierung 7
M JPA - Datenbanktabellen auslesen Datenbankprogrammierung 14
F NUR 3 datensätze auslesen Datenbankprogrammierung 6
M Datenbank (MySQL) auslesen Datenbankprogrammierung 3
S MySQL Datenbank auslesen - Treiberproblem Datenbankprogrammierung 12
F MySQL SSH Datenbank auslesen Datenbankprogrammierung 3
D Blob MimeTyp auslesen Datenbankprogrammierung 2
S Verschiedene Informationen gleichen Typs speichern und auslesen Datenbankprogrammierung 4
A PostgreSQL anfängerfrage: resultset zeilenweise auslesen Datenbankprogrammierung 2
D Hibernate: ArrayList in DB speichern und auslesen Datenbankprogrammierung 4
S Werte aus Datenbank auslesen und in eine bestimmte Excelzelle eintragen Datenbankprogrammierung 2
P MySQL Objekt aus BLOB auslesen Datenbankprogrammierung 3
B String aus txtDatei auslesen und in Datenbank schreiben. Datenbankprogrammierung 8
B häppchenweises auslesen "lazy loading" von Datenbank Datenbankprogrammierung 13
D Csv auslesen und in mysql db schreiben Datenbankprogrammierung 9
K PostgreSQL PDF-Dateien in Datenbank speichern und auslesen Datenbankprogrammierung 4
E Datenbank auslesen mit JAVA Datenbankprogrammierung 2
W MySQL Datenbanken auslesen Datenbankprogrammierung 3
H DB auslesen (Hibernate, Query, Parameter) Datenbankprogrammierung 8
J Tabelle auslesen- knifflig Datenbankprogrammierung 7
W bestimmte Zeile mit bestimmter Spalte auslesen Datenbankprogrammierung 11
Plastagen DBC Dateien korrekt auslesen Datenbankprogrammierung 2
O vernümpftig Datumsangabe in mySQL DB speichern und auslesen Datenbankprogrammierung 4
M Derby insert, ID auslesen Datenbankprogrammierung 3
S Java objekt in MYSQL auslesen Datenbankprogrammierung 32
R Update Time auslesen Datenbankprogrammierung 2
A Datenbankanbindung an mySQL und Ein-/Auslesen der Daten Datenbankprogrammierung 4
MQue speziell Auslesen aus Datenbank Datenbankprogrammierung 5
C MP3 in DB als Blob, wieder auslesen und als MP3 speichern??? Datenbankprogrammierung 8
V tabellenName aus den Metadaten auslesen Datenbankprogrammierung 4
L primärschlüssel auslesen Datenbankprogrammierung 6
G Bild aus als OLE-Typ aus MS Acces auslesen Datenbankprogrammierung 3
G Namen der Datebank aus einer Connction auslesen Datenbankprogrammierung 3
S Fehler beim Auslesen von Daten Datenbankprogrammierung 6
S ResultSet variabel auslesen Datenbankprogrammierung 4
G Daten schneller aus einer DB auslesen Datenbankprogrammierung 9
T Metadaten Auslesen Datenbankprogrammierung 7
B Spaltennamen von MySQL Datenbank nach Java auslesen Datenbankprogrammierung 10
A Auslesen von Werten aus der DB in eine csv-Datei Datenbankprogrammierung 4
A Auslesen aus einer csv-Datei Datenbankprogrammierung 2
N Unbekannte Datenbank über Metadaten auslesen? Datenbankprogrammierung 9
A Funktionale Abhängigkeiten auslesen Datenbankprogrammierung 4
T Datenbanknamen eines Datenbankservers auslesen Datenbankprogrammierung 9
thE_29 Byte auslesen mit MS SQL Server Datenbankprogrammierung 4
W Auslesen von Tabellen einer MYSql Datenbank Datenbankprogrammierung 25
M Preparedstatement SQL-string auslesen Datenbankprogrammierung 13
M Mysql datenbank auslesen und mittels servlet wiedergeben Datenbankprogrammierung 3
G Oracle-Record auslesen Datenbankprogrammierung 2
M Letzter Datensatz mit auslesen(brauch kleinen Tipp) Datenbankprogrammierung 15
G Spalten Namen auslesen und Zeilen daten auslesen Datenbankprogrammierung 17
F JDBC Abfrage Werte auslesen Datenbankprogrammierung 2
V mysql - tree auslesen und richtig ordnen Datenbankprogrammierung 4
G DB auslesen und in ein JTextArea schreiben Datenbankprogrammierung 3
Z Auslesen aus einer mySQL Datenbank Datenbankprogrammierung 4
P MYSQL werte aus liste auslesen und anderen damit updaten Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben