![]() |
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:
|
AW: Einlesen aus Datenbank
Die Spalte heißt Passwort, da habe ich keinen Tippfehler oder Schreibfehler.
|
AW: Einlesen aus Datenbank
Und wenn Du den Spaltennamen einmal in eckige Klammern setzt?
|
AW: Einlesen aus Datenbank
Gleiche Meldung -.-
|
AW: Einlesen aus Datenbank
Kannst Du mit dem Management Studio auf die Datenbank zugreifen? Falls ja, versuch das SQL doch einmal dort auszuführen.
|
AW: Einlesen aus Datenbank
Ja kann ich und ich habs grad probier, funktioniert einwandfrei -.-
jedoch nicht in Delphi :( Ich verstehs nicht -.- |
AW: Einlesen aus Datenbank
Das ist mir im Moment etwas zu hoch :gruebel:. Wie genau sieht die Abfrage denn aus?
|
AW: Einlesen aus Datenbank
Code:
Ergebniss: ist das Passwort was ich haben möchte.
SELECT Passwort
FROM Benutzer WHERE Vorname = 'Tomi' |
AW: Einlesen aus Datenbank
Funktioniert denn
SQL-Code:
aus Delphi heraus? Passwort (mit t am Ende) ist ja wohl kein reserviertes Wort, daran dürfte es nicht liegen.
SELECT *
FROM Benutzer WHERE Vorname = 'Tomi' |
AW: Einlesen aus Datenbank
Also ich hab jetzt den fehler minimieren können auf die Befehlszeile:
Delphi-Quellcode:
und das mit Select * From funktioniert auch, sprich er schreibt keinen fehler.
ShowMessage(datamod_formular.DataModule1.ADOQuery1.FieldByName('Passwort').AsString);
Aber warum mag er die FieldByName funktion nicht? |
AW: Einlesen aus Datenbank
Die Query ist zum Fehlerzeitpunkt geöffnet? Ein wenig mehr Quelltext wäre hilfreich.
|
AW: Einlesen aus Datenbank
Ja is sie.. ja den ganzen Quellcode habe ich bei meiner frage ja gepostet.
|
AW: Einlesen aus Datenbank
Nee, geöffnet ist ADOQuery2_login, Du fragst aber ADOQuery1 ab.
|
AW: Einlesen aus Datenbank
Nein, nein, nein..hass hass hass!!! ich bin sooo blind!!!
Danke |
AW: Einlesen aus Datenbank
Zitat:
Man kann auch Hashes miteinander vergleichen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 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