This is my corner for documenting my ideas.
It mostly contains posts for Access Databases (samples, full applications, etc.) as i like rapid software application development. Occasionally you will find other stuff like physics notes.

Saturday, 9 March 2013

Μία Βάση για τους Κωδικούς Μας

Ένα πρόβλημα που αργά ή γρήγορα εμφανίζεται στον χρήστη του web είναι η διαχείρηση των συνδυασμών ονόματος χρήστη και κωδικού για κάθε λογαριασμό για το σύνολο του υπηρεσιών που του παρέχονται. Οι περισσότεροι χρήστες κάνουν το λάθος να χρησιμοποιούν τον ίδιο κωδικό παντού - τακτική με μεγάλο ρίσκο καθώς η πιθανότητα υποκλοπής αυξάνει με το αριθμό των υπηρεσιών στον οποίο χρησιμοποιείται ο ίδιος κωδικός. Άλλοι αφήνουν τον browser τους να διαχειριστεί τους λογαριασμούς ώστε να κάνει αυτόματα login αλλά όποιος έχει πρόσβαση στον browser που χρησιμοποιείτε μπορεί δύσκολα ή εύκολα να τους βρει. Δυστυχώς οι browser δεν έχουν αρκούντως στραφεί στη πολυχρηστική λογική κάτι που αναπάντεχα θα συμβεί όμως αφού οι περισσότερες υπηρεσίες μετακομίζουν στο σύννεφο (cloud computing) και ο browser θα παίζει το ρόλο του λειτουργικού συστήματος (Chrome OS). 

Υπάρχουν και μερικοί παρανοϊκοί όπως εγώ που θυμούνται όλους τους διαφορετικούς κωδικούς που χρησιμοποιούν καθώς και με ποιο συνδυασμό ονόματος χρήστη αλλά πλέον δεν θυμάμαι που έχω κάνει λογαριασμό. Βέβαια κωδικούς δεν χρησιμοποιούμε μόνο στο Web (πχ. τα pin των καρτών τραπεζών/sim κλπ.). Φυσικά υπάρχουν προγράμματα που αναλαμβάνουν τη διαχείριση κωδικών και μάλιστα δωρεάν και πολύ ποιοτικά (KeePass Password Safe) αλλά από τη μία μπορεί να διαθέτουν πολύ παραπάνω χαρακτηριστικά από όσα χρειάζεστε και από την άλλη υπάρχει πάντα η πιθανότητα εφόσον είναι λογισμικό αδιαφανές για εσάς, να διαρεύσουν τα ευαίσθητα δεδομένα σας. Έτσι έχω σκαρώσει μια μικρή εφαρμογή στην Access για προσωπική χρήση και την οποία σας παρουσιάζω. Σας θυμίζω ότι η Access είναι ίσως ο πιο εύκολος τρόπος με σχεδόν μηδενική προγραμματιστική εμπειρία να κατασκευάσει κάποιος μια εφαρμογή για να καλύψει τις ανάγκες του. 
Σε προηγούμενη ανάρηση δείξαμε πως μπορεί κάποιος να επιτρέψει την είσοδο στην εφαρμογή μας σε Access μόνο σε προκαθορισμένους χρήστες με αντίστοιχους κωδικούς.  Όμως για λόγους συμβατότητας χρησιμοποιούσα την Access 2003. Εδώ θα χρησιμοποιήσω 
το νεώτερο format (Access 2007/2010) στο οποίο υπάρχει δυνατότητα ισχυρότερης κρυπτογράφησης της βάσης μέσω κωδικού, κάτι το οποίο θεωρώ απαραίτητο για τη συγκεκριμένη κατηγορία εφαρμογής. 

Δεν κάνουμε διπλό κλικ επάνω στο αρχείο της εφαρμογής αλλά ανοίγουμε την Microsoft Access από το Start>(All) Programs>Microsoft Office&>Microsoft Access 2007 (ή 2010). Όταν ξεκινήσει επιλέγουμε Open


επιλέγουμε το αρχείο της εφαρμογής όπου το έχουμε αποθηκεύσει και το ανοίγουμε για αποκλειστική χρήση (Οpen Εxlusive) όπως φαίνεται στη παρακάτω εικόνα. 



Όταν ξεκινήσει η εφαρμογή θα δείτε την παρακάτω εικόνα. Πατάμε Κλείσιμο στο διαφημιστικό


και εμφανίζεται η φόρμα καταχώρισης. Μετακινούμαστε στο Database Tools και πατάμε το κουμπί Encrypt with Password. 


καταχωρούμε το password (δύο φορές για επιβεβαίωση) και πατάμε OK.


Την επόμενη φορά που θα ανοίξετε την εφαρμογή θα σας ζητήσει τον κωδικό που καταχωρήσατε:


Και τώρα στο κυρίως πιάτο:

Πίνακες:
Η καλή οργάνωση επιβάλει τη κατηγοριοποίηση των λογαριασμών. Για αυτό το λόγο έχω προβλέψει μία δενδρική δομή αλλά μέχρι δύο επίπεδα καθώς νομίζω ότι επαρκούν. Για παράδειγμα οι λογαριασμοί e-mail μπορούν να θεωρηθούν ως υποκατηγορία των υπηρεσιών web. Έτσι θα δείτε να υπάρχουν δύο σχετιζόμενοι πίνακες με ονόματα tblCategories και tblSubcategories (στο παράδειγμα πριν Category: World Wide Web > SubCategory: E-mail Accounts). Τέλος χρειαζόμαστε φυσικά και ένα πίνακα για τους λογαριασμούς (tblPasswords) στον οποίο θα υπάρχουν ως πεδία η κατηγορία και η υποκατηγορία του λογαριασμού. 




Στην εικόνα παρακάτω δείχνω επάνω στη φόρμα ποια στοιχεία αντιστοιχούν σε πεδία του πίνακα tblPasswords και τι είδους πεδία είναι. 


Θα παρατηρήσατε ότι υπάρχουν και μερικά στοιχεία τα οποία δεν αντιστοιχούν σε πεδία. Το πρώτο αφορά ένα κουμπί που εμφανίζει και αποκρύπτει τον κωδικό και η χρησιμότητα του είναι νομίζω προφανής. Στην εκκίνηση της εφαρμογής είναι Μη Ορατό (ο κωδικός). Ο κώδικας σε Visual Basic που συνδέεται με το Event "On Click" (μεταβείτε στο Design View της φόρμας και δείτε τα properties) του κουμπιού αυτού παρατίθεται παρακάτω:

Private Sub cmdShowHidePass_Click()

If Me.cmdShowHidePass.Caption = "Ορατό" Then
  Me.cmdShowHidePass.Caption = "Μη Ορατό"
  Me.Password.InputMask = ("")
Else
  Me.cmdShowHidePass.Caption = "Ορατό"
  Me.Password.InputMask = ("Password")
End If

End Sub

Όπως ίσως καταλαβαίνετε αυτό που κάνει το διαδοχικό πάτημα του κουμπιού είναι να αλλάζει την ταμπέλα του και να κάνει τον κωδικό ορατό <Me.Password.InputMask = ("") > ή μη ορατό < ...= ("Password")>

Το δεύτερο αφορά αφορά ένα πεδίο στο οποίο ορίζουμε το μήκος ενός τυχαίου κωδικού που μπορεί να παράξει η εφαρμογή, δηλαδή αν δώσουμε π.χ. τη τιμή 12 στο πεδίο και πατήσουμε το κουμπί "Πάμε" θα δείτε το πεδίο Κωδικός να συμπληρώνεται αυτόματα με έναν τυχαίο Κωδικό 12 χαρακτήρων. Ο κώδικας για τη λειτουργία αυτή (θα τον δείτε στο modules με όνομα mdlRandomPassword) δεν είναι δικός μου και τον έχω βρει στο www.ms-office.gr.

Στο δεξί μέρος της φόρμας υπάρχουν δύο κουμπιά. Το κάτω εξάγει τη βάση των κωδικών μας σε ένα αρχείο Excel (αφού πρώτα τρέξει το query με όνομα  qryPasswords) και το επάνω ανοίγει μία φόρμα στην οποία καταχωρούμε τις κατηγορίες και τις υποκατηγορίες των κωδικών μας. Εδώ αφού οι πίνακες tblCategories και tblSubcategories είναι συσχετιζόμενοι, δηλαδή μία κατηγορία έχει πολλές υποκατηγορίες, έχω φτιάξει δύο φόρμες για κάθε πίνακα και η φόρμα sbfrmSubcategories είναι υποφόρμα στη φόρμα frmCategories (με προφανείς τους πίνακεσ από τους οποίους παίρνουν δεδομένα). 



Η συσχέτιση των δύο πινάκων είναι "ένα προς πολλά":


Κατεβάστε-Τρέξτε-Μελετήστε!