Na, ja, wie seht ihr das:
'User' = 'Benutzer'
war noch nie wahr, denn diese beiden Strings sind nunmal nur semantisch äquivalent, aber vom ersten bis zum letzten Buchstaben unterschiedlich.
.
In
SQL werden Felder und Tabellen, mit '[]' eingefasst, wenn man Konflikte mit reservierten Wörten vermeiden will. Es sollte also so laufen:
Select * from [user] where [user]='Benutzer' and [Password]=Password('passw')
Grundsätzlich würde ich Feldnamen mit einem Prefix versehen, der für alle Tabellen unterschiedlich ist. Foreign Keys erhalten den Prefix der Fremdtabelle, damit sind 'Natural Joins' möglich, die vielleicht doch irgendwann im
SQL Standard implementiert sind.
Mit Prefixen wäre die Abfrage eindeutig:
Select * from User Where usUser='Benutzer' and usPassword = Passw('passw')
Das Beste zum Schluss: Stimmt es, das die Hashfunktion im Server installiert ist? Dann muss ich ja nur einen
SQL-Monitor auf den Server setzen und schon hab ich alle Passwörter! Implementiere die Hashfunktion lieber in einer Mittelschicht, sodaß ein potentieller Angreifer nur sowas sieht;
Select * from User Where usUser='Benutzer' and usPassword = 'F234SDFGs789HJKHJ'
Damit kann er dann nicht allzuviel anfangen.