Οι προγραμματιστές εξακολουθούν να ψάχνουν το σημείο όπου ένα string σύνδεσης, ένα JDBC URL ή μια καταχώριση tnsnames.ora επιλέγει το VPN. Τέτοιο σημείο δεν υπάρχει. Η σήραγγα στήνεται από το λειτουργικό σύστημα ή από πελάτη προμηθευτή που καταχωρεί έναν εικονικό προσαρμογέα, και κάθε βιβλιοθήκη βάσης δεδομένων από πάνω χρησιμοποιεί το επίπεδο υποδοχών που προκύπτει. Ένα string σύνδεσης ονομάζει κεντρικό υπολογιστή, θύρα και διαπιστευτήριο, και αυτό είναι όλο το λεξιλόγιο.

Μύθος: το string σύνδεσης μπορεί να επιλέξει σήραγγα

Ο οδηγός ανοίγει υποδοχή TCP σε κεντρικό υπολογιστή και θύρα. Δεν έχει API για ανύψωση σήραγγας, δεν έχει πεδίο για προφίλ σήραγγας και δεν έχει τρόπο να πιστοποιηθεί σε πύλη VPN.

Γι' αυτό τα εργαλεία συμπεριφέρονται το ίδιο μόλις υπάρξει διαδρομή. Τα SSMS, DBeaver, Eclipse Data Tools και ένα απλό sqlcmd ενεργούν σαν ο διακομιστής να είναι στο τοπικό δίκτυο, γιατί από την οπτική της υποδοχής είναι. Ο εικονικός προσαρμογέας έκανε το υποδίκτυο της βάσης προσβάσιμο, και ο οδηγός ποτέ δεν ξέρει πώς.

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

Σηκώστε τη σήραγγα πριν τρέξει ο οδηγός

Συνδεθείτε στο VPN σε επίπεδο λειτουργικού συστήματος, ακολουθώντας τις οδηγίες του παρόχου ή της ομάδας δικτύου, και μόνο τότε ανοίξτε το εργαλείο. Στην πράξη αυτό σημαίνει ότι υπάρχει διαδρομή προς το υποδίκτυο της βάσης πριν ο οδηγός επιλύσει το όνομα του κεντρικού υπολογιστή.

Κρατήστε την εποπτεία της σήραγγας έξω από την εφαρμογή. Μια υπηρεσία PHP ή Java που προσπαθεί να σηκώσει η ίδια τον σύνδεσμο κωδικοποιεί τη συμπεριφορά ενός παρόχου μέσα στον επιχειρησιακό κώδικα, και κάθε μεταγωγή αποτυχίας γίνεται έκδοση εφαρμογής. Ένας επόπτης που κατέχει τη σήραγγα, την παρακολουθεί και την επανεκκινεί είναι ξεχωριστό ζήτημα από τη διαδρομή του ερωτήματος.

Ελέγξτε τη διαδρομή πριν κατηγορήσετε τον οδηγό: αν ο κεντρικός υπολογιστής δεν επιλύεται ή η θύρα δεν απαντά από το κέλυφος, κανένα string σύνδεσης δεν θα το αλλάξει.

Μύθος: αποτυχία ελέγχου ταυτότητας Windows σημαίνει χαλασμένη διαδρομή

Ο έλεγχος ταυτότητας Windows μέσω VPN συχνά αποτυγχάνει με σφάλμα που μοιάζει με βλάβη δικτύου, ενώ η διαδρομή είναι εντάξει. Όταν ο λογαριασμός ανήκει σε άλλον τομέα και ο φορητός δεν μπορεί να ενταχθεί σε αυτόν, ξεκινήστε τον πελάτη με ρητά διαπιστευτήρια αντί για την ταυτότητα της συνεδρίας της επιφάνειας εργασίας.

runas /noprofile /netonly /user:CORP\dbreader "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe"

Ο διακόπτης /netonly κρατά αυτά τα διαπιστευτήρια μόνο για απομακρυσμένο έλεγχο ταυτότητας. Επιβεβαιώστε τι έλαβε πραγματικά ο διακομιστής με SELECT SUSER_SNAME() αντί να εμπιστεύεστε το παράθυρο σύνδεσης. Αναφέρεται ότι η αποθήκευση του διαπιστευτηρίου για τη διεύθυνση του διακομιστή στο Windows Credential Manager λειτουργεί για το SSMS αλλά όχι πάντα για υπηρεσία που τρέχει υπό άλλον λογαριασμό, οπότε ελέγξτε ποια ταυτότητα χρησιμοποιεί η διεργασία πριν αλλάξετε τη σύνδεση.

Η καθυστέρηση μετατρέπει έναν δρομέα στην πλευρά του διακομιστή σε λήξη χρόνου

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

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

Η ίδια αριθμητική ισχύει για φλύαρα ORM και για κάθε πελάτη που εκδίδει μία δήλωση ανά γραμμή. Αν το σχέδιο ερωτήματος είναι καλό και η μεταφορά μικρή, μετρήστε τις ανταλλαγές δικτύου πριν συντονίσετε τη βάση.

Ελέγξτε τη θύρα, το στιγμιότυπο και το τοπικό φίλτρο

Ένα επώνυμο στιγμιότυπο ακούει σε δυναμική θύρα, οπότε επιβεβαιώστε τη θύρα αντί να υποθέτετε 1433. Σε προεπιλεγμένο στιγμιότυπο η τιμή διαβάζεται από την τιμή μητρώου TcpPort κάτω από το κλειδί SuperSocketNetLib του στιγμιότυπου. Για Oracle, επαληθεύστε ότι ο κεντρικός υπολογιστής στο tnsnames.ora επιλύεται, ότι η διεύθυνση απαντά και ότι η θύρα του ακροατή επιτρέπεται· το 1521 είναι κοινή προεπιλογή, όχι εγγύηση.

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

Γράψτε το στάδιο στο δελτίο. Αλλιώς ο επόμενος θα επαναλάβει την ίδια αναζήτηση string σύνδεσης με την οποία ξεκίνησαν όλα.

Σχετικά άρθρα