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

 

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

Δυναμικό pass SQL με χρήση EXEC

Îåêßíçóå áðü ôï ìÝëïò axaros. Τελευταία δημοσίευση από το μέλος axaros στις 31-05-2005, 08:36. Υπάρχουν 23 απαντήσεις.
Σελίδα 2 από 2 (24 εγγραφές)   < 1 2
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  29-05-2005, 15:32 2312 σε απάντηση της 2309

    Re: Δυναμικό pass SQL με χρήση EXEC

     axaros wrote:
     KelMan wrote:
     ώς SQL injection attacks...

    Στο προηγούμενο Post αναφερόμουνα στο πρώτο σκέλος της απάντησης για το δεύτερο όντως τι κάνει κανείς ???
    Υπάρχει σωτηρία???


    Υπάρχουν διάφοροι τρόποι από απλοί "χειροκίνητοι", μέχρι σύνθετοι...
    Πχ αν κάνεις
    "WHERE CustName LIKE '" & Textbox1.Text & "%'"
    θα πρέπει να αφαιρέσεις όλα τα single quotes από το text property.
    Αν όμως χρησιμοποιείς ένα Command object και δίνεις τιμές σε παραμέτρους μέσω Parameter objects τότε δεν έχεις πρόβλημα. Για περισσότερες πληροφορίες ρίξε μια ματιά εδώ ή δώσε στο Google "SQL injection attack" και θα βρεις πολλύ υλικό...
    Vir prudens non contra ventum mingit
  •  29-05-2005, 15:37 2313 σε απάντηση της 2312

    Re: Δυναμικό pass SQL με χρήση EXEC

    Ένα μεγάλο nvarchar parameter περνάω που περιέχει το WHERE Clause που θέλω ανά περίπτωση.


    Πάνος Αβραμίδης
  •  29-05-2005, 17:33 2316 σε απάντηση της 2286

    Re: Δυναμικό pass SQL με χρήση EXEC

    Εξέλθετε εις το πυρ το εξώτερον άθλιοι! Devil

    Το exec δεν έχει καμμία διαφορά από το να εκτελέσεις χύμα SQL. Ίδια προβλήματα ασφαλείας, ίδια προβλήματα ταχύτητας. Για να δουλέψει, θα πρέπει όποιος το εκτελεί να έχει δικαίωμα πρόσβασης στους πίνακες που εμπλέκονται. Να μην πούμε για τα καταπληκτικά injection attacks που μπορεί να κάνει κανείς, είτε από web εφαρμογές, είτε από windows εφαρμογές.

    Αν θέλετε να περιορίσετε τα strings που στέλνετε στο δίκτυο, φτιάξτε κατάλληλα views και καλέστε τα. Είναι όμως χίλιες φορές καλύτερο να φτιάξετε stored procedures για τους συνδιασμούς των παραμέτρων.

    Και κάτι που έμαθα από τότε που γράφτηκε το
    Dynamic SQL Where clauses using conditional operators. Τα case, where αναγκάζουν τον sql optimizer να δημιουργήσει διαφορετικά execution plans και κάθε φορά που εκτελείται το stored procedure ψάχνεται να βρει ποιό είναι το κατάλληλο.

    Δεν ξέρω πως να το πω πιο έντονα.
    Το exec είναι για την SQL ότι το copy paste για τη VB, την C# ή όποια άλλη γλώσσα.

    ΚΑΚΟ ΚΑΚΟ ΚΑΚΟ! ΞΟΥ ΞΟΥ ΞΟΥ!

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-05-2005, 18:01 2317 σε απάντηση της 2316

    Re: Δυναμικό pass SQL με χρήση EXEC

    Χμμμ... [^o)] Είπε κάποιος το αντίθτετο και δεν το κατάλαβα;


    Vir prudens non contra ventum mingit
  •  29-05-2005, 18:17 2318 σε απάντηση της 2317

    Re: Δυναμικό pass SQL με χρήση EXEC

    Όχι, απλά έχω τραβήξει τόσα εξαιτίας του exec που δεν έκατσα να διαβάσω όλο το thread! Άρχισα τον εξορκισμό μόλις διάβασα το πρώτο reply!
        Μου είχε τύχει περίπτωση όπου χρησιμοποιούσαν exec αβέρτα. Τώρα, ένα από τα "καλά" του exec είναι ότι προκαλεί καθυστέρηση η οποία είναι ιδιαίτερα αισθητή όταν έχεις πολλούς χρήστες. Κάποια στιγμή έφτασε η εφαρμογή να σέρνεται απελπιστικά, οπότε έπρεπε να καθαριστεί από όλα τα παραπανίσια select και οπωσδήποτε όλα τα exec. Σαν "γνώστης" της SQL (που σημαίνει ότι ήμουν από τους λίγους που προτιμούσαν να φτιάξουν το σωστό select αντί για cursors ή exec) έπεσε σε μένα να κοιτάξω να δω τί πήγαινε στραβά καθώς και εναλλακτικούς τρόπους. Άντε λοιπόν να μαζέψεις όλα αυτά τα exec, να τα μετατρέψεις πάλι σε καθαρό sql για να δεις τί συμβαίνει με το execution plan τους και μετά να φτιάξεις τα σωστά stored procedures. Πέρασα μια εβδομάδα μαύρα χάλια. Άσε που την επόμενη βδομάδα δεν μπορούσα να κάνω την δική μου δουλειά. Έτσι χάθηκαν δύο βδομάδες από τη σχεδίαση της αρχιτεκτονικής της επόμενης έκδοσης του προϊόντος. 
      
      Η SQL είναι μια γλώσσα που λέει να βρεις τη σωστή λύση. Δεν είναι εύκολο, αλλά ευτυχώς, αν ακολουθήσεις κάποιους απλούς κανόνες, μπορείς να φτάσεις σε μια καλή αποδεκτή λύση. Και ένας από αυτούς είναι "OXI Dynamic SQL!". Και αν νομίζεις ότι σου χρειάζεται, δεν έψαξες αρκετά για τη λύση.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-05-2005, 19:57 2319 σε απάντηση της 2318

    Re: Δυναμικό pass SQL με χρήση EXEC

    Δεν θα διαφωνήσω καθόλου μαζί σου. Ειναι κακή λύση.

    Απλά να κάνω μια παρατήρηση:
    Πολλές φορές έχει τύχει να κάνω μια ερώτηση που περιμένει συγκεκριμένη απάντηση. Οι καλοπροαίρετοι, δεν το αμφισβητώ αυτό, συνάδελφοι, τυχαίνει πολλές φορές να με ρωτήσουν "μα γιατί το κάνεις έτσι;", "γιατί δεν δοκιμάζεις να το κάνεις έτσι;" "είναι κακό να το κάνεις έτσι". Ομως, παρ'όλο που μπορεί να συμφωνώ με τις παρατηρήσεις, η ερώτηση είναι ερώτηση. Ορισμένες φορές δεν έχουμε επιλογή να το κάνουμε έτσι ή αλλιώς. Μπορεί αυτό να οφείλεται στο οτι ψωνίσαμε κώδικα αλλουνού και πρέπει να φτιαχτούν τα πάντα στη διάρκεια μιας πλήρους προβολής του "24", μπορεί να οφείλεται στο οτι ψωνίσαμε ΑΡΧΙΤΕΚΤΟΝΙΚΗ αλλουνού και αντε τρεχα τωρα, μπορεί να οφείλεται στο οτι μας πιέζουν πολύ και παρ'ότι γνωρίζουμε οτι δεν είναι η πλέον αποδεκτή λύση να μην έχουμε επιλογές, μπορεί να οφείλεται στο οτι δεν πληρωνόμαστε για να επανασχεδιάσουμε το μαραφέτι....

    Οπως και να έχει, ορισμένες φορές ακόμα και μια "λάθος" προσέγγιση αξίζει απάντηση. Ορισμένες προσεγγίσεις είναι χειρότερες από άλλες. Ομως κάθε στιγμή πρέπει να συνυπολογίζουμε και άλλες παραμέτρους ως προς την επιλογή της "χειρότερης" ή της "καλύτερης" λύσης. Αν εγώ πληρωθώ 10 ευρώ για να κάνω κάτι σε 1 ωρα και αυτό το κάτι γίνεται ταχύτερα με dynamic sql, ποιος θα μου πληρώσει το χρόνο για να ΜΗΝ το κάνω έτσι; Αν δεν υπαρχει κανείς, αν ο πελάτης δεν ενδιαφερεται για το ΠΩΣ, αν ο manager σου δεν ενδιαφέρεται για το μετά, τότε ψωνίζει το dynamic sql σου με ΟΛΑ τα προβλήματα που μπορεί να έχει και πάει παρακάτω...

    Ελπίζω να έγινα κατανοητός, δεν είχα πρόθεση να θίξω κάποιον.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  30-05-2005, 00:59 2324 σε απάντηση της 2319

    Re: Δυναμικό pass SQL με χρήση EXEC

    Τότε, ετοιμάσου για τις συνέπειες. Το dynamic sql είναι αντίστοιχο του συστηματικού copy-paste σε κάποια άλλη γλώσσα. Στην αρχή φαίνεται πιο γρήγορο. Όταν όμως "σκάσει" η μπόμπα, είναι πολύ δύσκολο να διορθωθεί.
      Αυτός είναι και ο λόγος που σου λένε "μην το κάνεις έτσι". Ναι, μπορεί να αντέξει για μια μέρα ο κώδικας. Μετά όμως, θα το σκυλομετανοιώσεις. Τότε να δεις πλάκα με το manager που δεν ενδιαφέρεται, αλλά θα θέλει να διορθωθεί η κατάσταση αμέσως.

    Και στην περίπτωση που μου έτυχε, πάλι επειδή δεν προλάβαιναν να καταλάβουν και να γράψουν σωστό sql έγινε η ζημιά. Το κόστος όμως ήταν αστρονομικό, καθώς οι καθυστερήσεις που προκάλεσε στο τέλος οδήγησαν στην ακύρωση του έργου, αλλά προκάλεσαν και καθυστερήσεις στην δημιουργία της νέας πλατφόρμας.

    Τελικά, οι "γρήγορες" λύσεις δουλεύουν μόνο στα demo. Σε πραγματικές συνθήκες όμως δεν αντέχουν πολύ.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  30-05-2005, 01:10 2325 σε απάντηση της 2324

    Re: Δυναμικό pass SQL με χρήση EXEC

    Παναγιώτη, όπως έγραψα και παραπάνω, δεν διαφωνώ σε τίποτα με αυτά που λές. Και προς Θεού, δεν επιχειρώ να καθιερώσω το FAD ως την de facto Ελληνική μεθοδολογία! Smile

    Απλά λέω οτι το "ετοιμάσου για τις συνέπειες" ορισμένες φορές κοστίζει φθηνότερα από το "αντιτάξου στον παντοδύναμο", οποιος και αν είναι αυτός. Αλλες φορές είναι ο chief του R&D, άλλες φορές ο project manager, αλλες φορές το αφεντικό. Οπως και να έχει, μετράς το κόστος, και αποφασίζεις αν "it's not your job" ή οχι.

    Αυτό είναι το μόνο που ήθελα να επισημάνω.



    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  31-05-2005, 08:36 2344 σε απάντηση της 2325

    Re: Δυναμικό pass SQL με χρήση EXEC

     cap wrote:

    Απλά λέω οτι το "ετοιμάσου για τις συνέπειες" ορισμένες φορές κοστίζει φθηνότερα από το "αντιτάξου στον παντοδύναμο", οποιος και αν είναι αυτός. Αλλες φορές είναι ο chief του R&D, άλλες φορές ο project manager, αλλες φορές το αφεντικό. Οπως και να έχει, μετράς το κόστος, και αποφασίζεις αν "it's not your job" ή οχι.
    Αυτό είναι το μόνο που ήθελα να επισημάνω.


    ΠΕΣ ΤΑ ΧΡΥΣΟΣΤΟΜΕ !!!!!!!
    Πάνος Αβραμίδης
Σελίδα 2 από 2 (24 εγγραφές)   < 1 2
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems