Πέρα από το γεγονός ότι αυτό που δεν παίζει είναι το Read, όχι το else, ο τρόπος αυτός ελέγχου password είναι λάθος και επικίνδυνος. Καταρχήν, είναι επικίνδυνο να δίνεις χύμα sql αντί για παραμέτρους. Έτσι μένεις ανοικτός σε sql injection attacks, όπου κάποιος μπορεί να χώσει sql κώδικα μέσα στα πεδία σου. Με το χύμα sql ο κώδικας αυτός θα εκτελεστεί χωρίς πρόβλημα. Δεύτερον, το password δεν πρέπει να αποθηκεύεται ποτέ στη βάση χύμα, γιατί έτσι μπορεί να το διαβάσει οποιοσδήποτε καταφέρει να δει τον πίνακα, π.χ. εκτελώντας ένα sql injection attack. Αντί να αποθηκεύεις χύμα, κάνε
Hash το password και αποθήκευσε το hash. Κάθε φορά που ο χρήστης δίνει το username/password, υπολογίζεις το hash του password που σου δίνει και το συγκρίνεις με αυτό που αποθηκεύτηκε.
Τέλος, αν μπορείς απλά μην βάζεις login form. Όλες οι Windows εφαρμογές ξέρουν ποιός είναι ο χρήστης που τις εκτελεί, έτσι δεν χρειάζεται να του ζητήσεις να ξαναδώσει Username/password. Τα δικαιώματα του χρήστη περνάνε και στην πρόσβαση σε διάφορα resources, π.χ. πρόσβαση σε αρχεία, σύνδεση στον SQL Server κλπ. Για τα web applications μπορείς να χρησιμοποιήσεις τον έτοιμο μηχανισμό authentication που έχει το ASP.NET.
Μπορείς να βρεις ποιός είναι ο χρήστης σε μία Winforms εφαρμογή με την
Windows.Identity.GetCurrent() . Μπορείς να ελέγξεις σε ποιά group ανήκει ο χρήστης (π.χ. επειδή θέλεις να περιορίσεις ποιοί χρήστες έχουν πρόσβαση στην εφαρμογή) μέσω του
Groups property.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos