Οι περισσότεροι αντιμετωπίζουν ένα όνομα κεντρικού υπολογιστή SQL Server ως πλήρη διεύθυνση και ένα VPN ως κάτι που είτε επιτρέπεται είτε όχι. Στην πράξη μια ονομαστική παρουσία κάνει τον πελάτη να εκτελέσει δεύτερη αναζήτηση μετά το DNS, και αυτή η αναζήτηση είναι το σημείο που σπάει συχνότερα ένα τούνελ. Ένα ρητό τελικό σημείο την παρακάμπτει, γι' αυτό το tcp:host,port μπορεί να λειτουργεί ενώ το host\INSTANCE λήγει. Η διαφορά είναι ανάμεσα στην εύρεση της υπηρεσίας και στην άδεια χρήσης της.

Ο μύθος: ένα όνομα κεντρικού υπολογιστή σημαίνει μία θύρα

Το όνομα κεντρικού υπολογιστή επιλύεται σε μια διεύθυνση και εκεί τελειώνει η δουλειά του. Μια ονομαστική παρουσία προσθέτει ένα όνομα παρουσίας που ο διακομιστής πρέπει να μεταφράσει σε θύρα TCP, και ο πελάτης δεν μπορεί να το μαντέψει. Η θύρα 1433 είναι η προεπιλογή για μια προεπιλεγμένη παρουσία, όχι ιδιότητα κάθε παρουσίας στο μηχάνημα. Αν αντιμετωπίσουμε τα δύο ως το ίδιο πράγμα, προκύπτει το κλασικό σύμπτωμα: το ping λειτουργεί, το DNS λειτουργεί, η σάρωση της 1433 δεν δείχνει τίποτα και το συμπέρασμα είναι ότι το δίκτυο μπλοκάρει το SQL.

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

Τι κάνει πραγματικά ο πελάτης με μια ονομαστική παρουσία

Αφού επιλύσει τον κεντρικό υπολογιστή, ο πελάτης στέλνει αίτημα ανακάλυψης στον SQL Server Browser μέσω UDP 1434 και ρωτά ποια θύρα χρησιμοποιεί η ονομαστική παρουσία. Η υπηρεσία browser απαντά από το μητρώο του ίδιου του διακομιστή και έπειτα ο πελάτης ανοίγει σύνδεση TCP σε εκείνη τη θύρα. Δύο πρωτόκολλα και δύο θύρες εμπλέκονται πριν γίνει καν απόπειρα σύνδεσης.

nslookup sqlhost.corp.example
nc -vzu sqlhost.corp.example 1434
Get-Service -Name SQLBrowser

Γι' αυτό ένα μπλοκάρισμα μόνο του UDP παράγει λήξη που μοιάζει με νεκρό κεντρικό υπολογιστή. Αν η υπηρεσία browser είναι σταματημένη ή απενεργοποιημένη, το αίτημα ανακάλυψης μένει αναπάντητο παρόλο που η μηχανή βάσης δεδομένων λειτουργεί και η θύρα TCP της είναι ανοιχτή. Αν η παρουσία έχει ρυθμιστεί με σταθερή θύρα, ο πελάτης ρωτά ακόμα, εκτός αν του δόθηκε απευθείας το τελικό σημείο. Κάθε μία από αυτές τις αστοχίες φαίνεται ίδια στο μήνυμα σφάλματος της εφαρμογής, και χρειάζονται διαφορετικές διορθώσεις.

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

Γιατί το ρητό τελικό σημείο λειτουργεί όταν το όνομα δεν λειτουργεί

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

sqlcmd -S "tcp:sqlhost.corp.example,51433" -U app_login -Q "SELECT @@SERVERNAME"
Test-NetConnection sqlhost.corp.example -Port 51433

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

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

Μετά την ανακάλυψη: η ταυτοποίηση και η ταυτότητα είναι ξεχωριστές

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

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

Ο μύθος που πρέπει να εγκαταλείψουμε είναι ότι το όνομα κεντρικού υπολογιστή SQL Server είναι πλήρης διεύθυνση. Είναι ένας κεντρικός υπολογιστής συν, για μια ονομαστική παρουσία, μια αναζήτηση που το τούνελ μπορεί να μη μεταφέρει. Ονομάστε τη θύρα, ονομάστε τη διαδρομή ανακάλυψης, και η επόμενη αστοχία θα σας πει ποιο στρώμα να διορθώσετε.

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