Καλησπέρα,
Γράφω ένα Windows Forms VB.NET application όπου παίρνει και δίνει πληροφορία σε ένα SQL Server Database.
Το πρόγραμμα λειτουργεί τέλεια και όλα όσα ήθελα να κάνει, τα κάνει ήδη. Οπότε έφτασα στο σημείο που δεν έχω ασχοληθεί ποτέ στο παρελθόν. Την Ασφάλεια.
Θεωρούμε ότι υπάρχει ένας Admin που έχει πλήρη έλεγχο στην βάση δεδομένων και μετά υπάρχουν διάφοροι άνθρωποι που έχουν περιορισμούς στο τι μπορούν να κάνουν edit ή view.
Υπάρχουν 2 πράγματα τώρα:
* SQL Server "Users"
* "Accounts" στο πρόγραμμα
Τα accounts μπορούν να παίρνουν πληροφορίες για το τι είδος είναι από ένα table στη βάση δεδομένων (π.χ. αν στο row του account name του χρήστη, το column "GBM", που λειτουργεί σαν flag, είναι TRUE, τότε στο πρόγραμμα έχει δικαιώματα GBM)
Σκέφτηκα επίσης ότι για log in στο πρόγραμμα θα πρέπει να πατάνε το Username τους και ένα password, και στη βάση δεδομένων για ασφάλεια θα είναι αποθηκευμένο ένα SHA3 hash με salt που μπορεί να είναι ένας τυχαίος αριθμός για τον κάθε χρήστη αποθηκευμένο στο sql server row του. Οπότε το πρόγραμμα (όντας ήδη συνδεδεμένο στη βάση) θα παίρνει το password που πληκτρολογήθηκε, θα διαβάζει το salt από τη βάση, θα παράγει το SHA3 και θα το συγκρίνει με το SHA3 στη βάση.
Ερώτηση 1: Στην βάση δεδομένων, πώς είναι καλό να συνδέεται ο κάθε χρήστης?
* Διαφορετικό SQL User για κάθε χρήστη και ρύθμιση δικαιωμάτων ανάγνωσης/edit;
* 1 SQL User για κάθε ομάδα χρήστη που μοιράζεται ίδια δικαιώματα;
* 1 global SQL User για όλους με πλήρη δικαιόματα και απλώς το πρόγραμμα θα επιτρέπει/αποτρέπει τον καθένα από το να γράψει/δει εκεί που δεν πρέπει;
Ερώτηση 2:
* Το User ID και Password για τον SQL Server που θα είναι γραμμένα στο πρόγραμμα;
Αν είναι σε αρχείο, μπορεί να το δει κάποιος και να συνδεθεί απευθείας στον SQL Server. Δεν το θέλουμε αυτό.
Αν είναι σε μεταβλητή ή hardcoded, αν κάποιος κάνει reverse engineer, δεν μπορεί πάλι να το βρει και να πάρει έλεγχο του SQL Server?
*Ποιος είναι ο προτεινόμενος τρόπος;
Ευχαριστώ πραγματικά για οποιαδήποτε ιδέα :)