Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Einlesen aus Datenbank (https://www.delphipraxis.net/163003-einlesen-aus-datenbank.html)

t0mmy 12. Sep 2011 16:08

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;

DeddyH 12. Sep 2011 16:31

AW: Einlesen aus Datenbank
 
Zitat:

Zitat von t0mmy (Beitrag 1123704)
Mein Problem is es, das ich ein Loginfenster habe wo ich die Anmeldedaten aus einer MySQL Datenbank vergleiche.

Das ist schon ein Problem? Dann haben aber tausende anderer Programme auf der Welt dieselben Probleme. Im Ernst: was ist jetzt Deine Frage?

generic 12. Sep 2011 16:34

AW: Einlesen aus Datenbank
 
ADO und MYSQL funktioniert nicht (oder hast du einen Treiber gefunden?)
ADO ist für MSSQL gemacht.


Delphi-Quellcode:
datamod_formular.DataModule1.ADOQuery2_login.SQL.Text := 'Select Passwort from Benutzer where Vorname ='''+Edit1_Benutzername.Text+'''';
Diese Zeile enthält eine SQL-Injection!

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?

p80286 12. Sep 2011 16:43

AW: Einlesen aus Datenbank
 
Er hat keine Chance das PW zu vergleichen da es als Hash-Wert vorliegt??

Gruß
K-H

DeddyH 12. Sep 2011 16:47

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)

Sir Rufo 12. Sep 2011 18:14

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 ;)

DeddyH 12. Sep 2011 18:37

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?

s.h.a.r.k 12. Sep 2011 22:31

AW: Einlesen aus Datenbank
 
Und wenn schon ein Hash, dann bitte gesalzen :stupid: Hier ein interessanter Artikel dazu.

t0mmy 13. Sep 2011 07:14

AW: Einlesen aus Datenbank
 
Also bei ShowMessage(E.Message) bekomme ich ADOQuery1: Das Feld 'Passwort' wurde nicht gefunden -.-

DeddyH 13. Sep 2011 07:21

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 16:36 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz