Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Βοήθεια με έλεγχο security σε application

Îåêßíçóå áðü ôï ìÝëïò Αλέξανδρος Δημητρίου. Τελευταία δημοσίευση από το μέλος Αλέξανδρος Δημητρίου στις 30-09-2007, 22:47. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  30-09-2007, 13:33 35651

    Βοήθεια με έλεγχο security σε application

    Παιδιά Καλησπέρα!

    Βρίσκομαι στη φάση δημιουργίας ενός db application xρησιμοποιώντας sql server 2005 (Είναι η πρώτη μου σύνθετη εφαρμογή)

    Υπάρχει καποια function με την οποία μπορώ να δώ τον αριθμό χρηστών που είναι αυτή τη στιγμή συνδεδεμένοι στον sql Server ώστε να βάλω όριο πλήθους χρηστών στην εφαρμογή μου παραμετρικά?

    Τι πρέπει να κάνω στο application ουτώς ώστε κάθε φορά που κάνει κάποιος login μετά απο όνομα και κωδικό χρήστη που ζητά η εφαρμογή  να φαίνεται στον sql server ως συνδεδεμένος χρήστης?

     

    Η βοηθεια σας είναι πολύ σημαντική και η αμεσότητα της σωτήρια..

    Σας ευχαριστώ πολύ εκ των προτέρων

     

     


    Αυτοί που ζουν γενναίοι είναι ενάρετοι,κάνουν ένδοξες πράξεις και πέθαινουν αιώνια ξακουστοί....
    Μ.Αλέξανδρος...IV Crusade...
  •  30-09-2007, 14:35 35656 σε απάντηση της 35651

    Απ: Βοήθεια με έλεγχο security σε application

    Κοίτα το sys.dm_exec_sessions view. Θα πρέπει όμως να προσέξεις ότι κάποιες συνδέσεις θα οφείλονται στα ίδια τα εργαλεία του SQL Server, κάποια θα ανοίγουν λόγω του agent, και κάποια θα είναι σε dormant κατάσταση προκειμένου να χρησιμοποιηθούν από το μηχανισμό του connection pooling.

    Γιατί όμως θέλεις να βάλεις όριο συνδέσεων? Ανάλογα με το λόγο, υπάρχουν τρόποι να πετύχεις το ίδιο αποτέλεσμα χωρίς να ελέγχεις χειροκίνητα τον αριθμό των συνδέσεων. Αν για παράδειγμα χρησιμοποιήσεις Enterprise Services ή WCF μπορείς να εξυπηρετήσεις πολλές δεκάδες ταυτόχρονες κλήσεις με μερικές δεκάδες connections. Αυτό το πετυχαίνεις δημιουργώντας ένα αντικείμενο το οποίο θα δέχεται κλήσεις από τους clients και θα συνδέεται με τη βάση χρησιμοποιώντας connection pooling. Το αποτέλεσμα είναι ότι με λιγότερα connection θα καταφέρειες να εξυπηρετήσεις περισσότερους clients, και, εδώ είναι το ωραίο, με μεγαλύτερη ταχύτητα απ' ότι αν ο καθένας συνδεόταν απευθείας στη βάση.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  30-09-2007, 18:32 35663 σε απάντηση της 35656

    Απ: Βοήθεια με έλεγχο security σε application

    H αλήθεια είναι οτι δε γνωρίζω τίποτα από όσα ανέφερες.Πάντως σε ευχαριστώ πάρα πολύ για το χρόνο σου.Όσο για το λόγο που το θέλω είναι για να δημιουργήσω κάποιο κλείδωμα στην εφαρμογή μου ανάλογα με το πόσες άδειες χρήσης διαθέτει.Αυτό που εγώ κάνω αυτή τη στιγμή είναι να έχω έναν πίνακα που έχει σαν πεδία το όνομα χρήστη και ένα boolean πεδίο.κάθε φορά που κάποιος χρήστης ανοίγει την εφαρμογή το boolean πεδίο γίνεται ένα(1).όταν κλείνει γίνεται μηδέν (0). Κατα το login μετράω τα πεδία που είναι ένα(1).Εάν αυτά ξεπερνούν το μέγιστο αριθμό χτηστών απαγορεύει τη πρόσβαση.Όπως επίσης απαγορέυει την πρόσβαση όταν ο χρήστης είναι στο ένα(1).Δλδ να μην μπορούν να συνδεθούν δύο χρήστες με το ίδιο username.Όμως δεν μου αρέσει αυτό σαν υλοποίηση.Φοβάμαι πως άμα σε πετάξει έξω η εφαρμογή από κάποιο σφάλμα το πεδίο θα παραμείνει στο ένα (1) με αποτέλεσμα να μένει ο χρήστης κλειδωμένος.

    1)Ο τρόπος αυτός είναι λάθος?

    2)Υπάρχει κάποιος άλλος τρόπος ώστε νς υλοποιήσω σωστά κατι τέτοιο?

    3)Αν ναί τότε η βοήθεια σας θα είναι σημαντική.

     

     

    Ευχαριστώ για το χρόνο όλων....


    Αυτοί που ζουν γενναίοι είναι ενάρετοι,κάνουν ένδοξες πράξεις και πέθαινουν αιώνια ξακουστοί....
    Μ.Αλέξανδρος...IV Crusade...
  •  30-09-2007, 18:57 35664 σε απάντηση της 35663

    Απ: Βοήθεια με έλεγχο security σε application

    Υπάρχουν κι άλλοι τρόποι για να πετύχεις κάτι τέτοιο. Μια "βελτίωση" στον δικό σου τρόπο, θα ήταν να κρατάς τα δεδομένα των χρηστών που κρατάς ήδη, αλλά μ'ένα έξτρα πεδίο, στο οποίο θα κρατάς το datetime του Last check που έκανες εάν ο χρήστης ήταν μέσα ή οχι. Θα πρέπει να τροποποιήσεις την εφαρμογή σου, η οποία κάθε Χ λεπτά, θα επιβεβαιώνει ότι ο χρήστης είναι ακόμα μέσα. Έτσι, κατά την διάρκεια του Login που θα ελέγχεις θα στοιχεία του χρήστη, θα ελέγχεις και πότε ήταν η τελευταία φορά που ενημέρωσε ο χρήστης ότι ήταν "μέσα" στην εφαρμογή. Εάν αυτός ξεπερνάει τα λεπτά που έχεις ορίσει εσύ, τότε για κάποιο λόγο έχει μείνει στην "απέξω", οπότε αγνοείς το boolean και τον βάζεις κανονικά στην εφαρμογή. Για να μην μπορεί κάποιος να στα "πειράξει" αυτά τα στοιχεία και μπαίνουν χρήστες αβέρτα, μπορείς να κρυπτογραφήσεις το boolean και την ημερομηνία ώστε να μπορείς να τα διαβάσεις μόνο εσύ.

    Ο άλλος τρόπος θα ήταν να "γυρίσεις" όλη την φιλοσοφία σου σε SOA κατάσταση ώστε να ελέγχεις απο το service τι συμβαίνει στην εφαρμογή σου και ποιοι χρήστες είναι μέσα, σε ένα IsolatedStorage (χωρίς βάση δεδομένων δηλαδή) κι έτσι να μην έχεις "φόβο" απο τπτ, αλλά να είναι και πιο ευέλικτο σαν μοντέλο.


    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  30-09-2007, 20:21 35669 σε απάντηση της 35664

    Απ: Βοήθεια με έλεγχο security σε application

    Εχεις σκεφτεί μήπως σε βολεύουνε τα session cookies με ημερομηνία / ώρα λήξης?
    Ρίξε μια ματιά εδώ:
    http://msdn2.microsoft.com/en-us/library/ms178194.aspx
    http://erlend.oftedal.no/blog/?blogid=41

    Nothing to declare...
  •  30-09-2007, 20:32 35673 σε απάντηση της 35669

    Απ: Βοήθεια με έλεγχο security σε application

    Υποθέτουμε ότι έχει WinForms.. Που και πάλι, WebForms να ήταν, δεν νομίζω ότι θα τον βόλευε γιαυτό το οποίο θέλει να κάνει!
    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  30-09-2007, 20:43 35675 σε απάντηση της 35673

    Απ: Βοήθεια με έλεγχο security σε application

    Panagiotis Kefalidis:
    Υποθέτουμε ότι έχει WinForms..


    Ops!! ok!!
    Νόμιζα οτι μίλαγε ο φίλος για WEB εφαρμογή... αν και δεν ξεκαθαρίζεται παρά μόνο από τη θέση του post.... Stick out tongue

    Nothing to declare...
  •  30-09-2007, 21:26 35677 σε απάντηση της 35675

    Απ: Βοήθεια με έλεγχο security σε application

    Από τη στιγμή που συζητάμε για το πως μπορούν να βρεθούν οι χρήστες που έχουν συνδεθεί στον SQL Server, είναι πάρα πολύ πιθανό η εφαρμογή να είναι desktop. Εξάλλου το είδος αυτό της ερώτησης είναι αρκετά συχνό. Οι άλλες πιθανόητες θα ήταν εφαρμογές windows services. Οι web εφαρμογές, εκ φύσεως, δεν κρατάνε ανοικτές συνδέσεις για πολύ ώρα, οπότε δεν μπορείς να βρεις τους συνδεδεμένους χρήστες από τη βάση.

    Το κύριο πρόβλημα με τη χρήση ενός πίνακα συνδεδεμένω χρηστών στη βάση είναι ότι δεν αντιμετωπίζει εύκολα την περίπτωση της απότομης διακοπής της σύνδεσης. Σε αρκετές περιπτώσεις αρκεί περιοδικά να καθαρίζει κανείς τον πίνακα και να αφήσει τον administrator να αντιμετωπίσει τις περιπτώσεις που κάποιος χρήστης χάσει τη σύνδεση και δεν μπορεί να ξανασυνδεθεί μέχρι το επόμενο καθάρισμα του πίνακα. Σε κάποιες άλλες όμως αυτό δεν αρκεί. Το περιοδικό καθάρισμα του πίνακα δεν μπορεί να είναι πολύ συχνό (σε διάστημα δευτερολέπτων) λόγω κόστους της επικοινωνίας με τη βάση.

    Η λύση του ελέγχου sys.dm_exec_sessions έχει το καλό ότι θέλει ελάχιστο κώδικα, αλλά δεν θα τα πάει καλά αν θέλει κάποιος να χρησιμοποιήσει connection pooling ή άλλες προχωρημένες αρχιτεκτονικές στις οποίες δεν αντιστοιχεί μία σύνδεση ανά χρήστη. Μία τέτοια περίπτωση θα είναι π.χ. να χρησιμοποιήσει MSMQ ή Queued Services.

    Μία λύση η οποία χρησιμοποιείται από πολλές εφαρμογές για license management είναι η χρήση ενός server component το οποίο καλούν οι εφαρμογές όταν ξεκινάνε ή κλείνουν. Το component αυτό αναλαμβάνει να κρατήσει ποιοί χρήστες είναι συνδεδεμένοι κάθε στιγμή. Αν με κάποιο τρόπο διατηρείται ανοικτή η σύνδεση στο component για όλη τη ζωή της εφαρμογής, μπορεί κανείς να χειριστεί σχετικά αυτόματα και την απότομη απώλεια σύνδεσης. Πολύ απλά, όταν το component αντιληφθεί την απώλεια σύνδεσης διαγράφει την εγγραφή του αντίστοιχου χρήστη.
    Ένας τρόπος να υλοποιήσει κανείς ένα τέτοιο license manager είναι να δημιουργήσει ένα per-session component στο WCF και να κρατήσει το reference στο component σε ένα global variable. Το ίδιο μπορεί να γίνει και με Enterprise Services και με Remoting.

    Άλλη λύση είναι οι εφαρμογές να επικοινωνούν περιοδικά με τον license manager μέσω UDP packets και αυτός να τους απαντάει ότι μπορούν να συνεχίσουν να δουλεύουν. Αν ο license manager δεν λάβει απάντηση από ένα client για αρκετή ώρα, θεωρεί ότι δεν τρέχει πλέον. Ο manager θα πρέπει να απαντάει στους clients για να εμποδίσει κάποιος πονηρούς χρήστες να τον παρακάμψουν μπλοκάροντας τα απαραίτητα ports. Η επικοινωνία αυτή θα μπορεί να γίνει πολύ συχνά καθώς τα UDP πακέτα είναι πολύ μικρά και η επεξεργασία τους δεν θα κοστίζει ιδιαίτερα στο server - σε αντίθεση με τον έλεγχο των συνδέσεων στη βάση.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  30-09-2007, 22:47 35681 σε απάντηση της 35677

    Απ: Βοήθεια με έλεγχο security σε application

    Sorry παιδιά.Αναφέρομαι σε windows application και η γλώσσα που χρησιμοποιώ είναι VB

    Πάντως εάν η τελευταία απάντηση αναφέρεται σε εμένα λυπάμαι μα δεν θα μπορέσω να την υλοποιήσω.Λίγη βοήθεια παραπάνω θα ήταν επιθυμητή.Παρ'ολα αυτά ο χρόνος σας είναι σεβαστός και σας ευχαριστώ παρα πολύ.....

     

     

     


    Αυτοί που ζουν γενναίοι είναι ενάρετοι,κάνουν ένδοξες πράξεις και πέθαινουν αιώνια ξακουστοί....
    Μ.Αλέξανδρος...IV Crusade...
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems