![]() |
Datenbank: MySql • Version: 2005 • Zugriff über: ADO
Einlesen aus Datenbank
Hallo!
Mein Problem is es, das ich ein Loginfenster habe wo ich die Anmeldedaten aus einer MySQL Datenbank vergleiche. Beispiel Also ich tippe den Benutzername ein, dieser wird in der Datenbank gesucht und das Passwort wird in der Datenbank mit dem verglichen mit dem ich mich anmelden will..
Delphi-Quellcode:
procedure TLogin.Button1_AnmeldenClick(Sender: TObject); begin datamod_formular.DataModule1.ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Password=****'+ ';Persisit Security Info=True;User ID = ***'+ ';Initial Catalog=***;Data Source=PROG-PC\SQLEXPRESS'; Try datamod_formular.DataModule1.ADOConnection1.Open; datamod_formular.DataModule1.ADOQuery2_login.SQL.Clear; datamod_formular.DataModule1.ADOQuery2_login.SQL.Text := 'Select Passwort from Benutzer where Vorname ='''+Edit1_Benutzername.Text+''''; datamod_formular.DataModule1.ADOQuery2_login.Active := True; datamod_formular.DataModule1.ADOQuery2_login.Open; if datamod_formular.DataModule1.ADOQuery2_login.Eof then begin ShowMessage('Nix'); end else begin ShowMessage(datamod_formular.DataModule1.ADOQuery1.FieldByName('Passwort').AsString); end; except on E : Exception do begin ShowMessage(E.Message); //MessageBox(0,'Anmeldung Fehlgeschlagen!','Login',MB_ICONERROR or MB_OK); end; end; end; |
AW: Einlesen aus Datenbank
Zitat:
|
AW: Einlesen aus Datenbank
ADO und MYSQL funktioniert nicht (oder hast du einen Treiber gefunden?)
ADO ist für MSSQL gemacht.
Delphi-Quellcode:
Diese Zeile enthält eine SQL-Injection!
datamod_formular.DataModule1.ADOQuery2_login.SQL.Text := 'Select Passwort from Benutzer where Vorname ='''+Edit1_Benutzername.Text+'''';
Besser ist wenn du mit Parametern arbeitest. Das Passwort würde ich mit in die SQL-Bedingung als WHERE mit aufnehmen. Dann brauchst du nur schauen ob es eine Zeile gibt oder nicht. Best Practice: Deine Passwörter sollten immer nur gehashed in der DB abgelegt sein. Sonst passiert es dir wie KM-Elektronik. 800.000 Kundendaten inkl. Passwörter gestohlen worden. P.S.: wie ist deine Frage bzw. was ist das Problem? |
AW: Einlesen aus Datenbank
Er hat keine Chance das PW zu vergleichen da es als Hash-Wert vorliegt??
Gruß K-H |
AW: Einlesen aus Datenbank
Wieso? MySQL unterstützt z.B. MD5 direkt.
SQL-Code:
SELECT
COUNT(*) FROM Benutzer WHERE Vorname = :vorname AND Passwort = MD5(:passwort) |
AW: Einlesen aus Datenbank
Ein Blick auf den ConnectionString und ich verwette mein Abendbrot, dass es sich um MSSQL (Express-Version) handelt ;)
Zum Prüfen des Kennworts bietet sich auch eine SP an. Und natürlich nur den Hash übergeben ... Wer sich fragt warum, der lässt einfach mal den Network Monitor mitlaufen und hat keine Fragen mehr ;) |
AW: Einlesen aus Datenbank
OK, das ist ein Argument, den Connnectionstring hatte ich mir nicht angeschaut. Trotzdem bleibt die Frage: was ist eigentlich die Frage?
|
AW: Einlesen aus Datenbank
Und wenn schon ein Hash, dann bitte gesalzen :stupid: Hier ein
![]() |
AW: Einlesen aus Datenbank
Also bei ShowMessage(E.Message) bekomme ich ADOQuery1: Das Feld 'Passwort' wurde nicht gefunden -.-
|
AW: Einlesen aus Datenbank
Und wieso nicht? Weil Du es wohl anders genannt hast, ich aber nicht wissen kann, wie es nun wirklich heißt :glaskugel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz