VPN પર SQL Serverનું નામવાળું ઇન્સ્ટન્સ: પોર્ટ 1433 નહીં, ડિસ્કવરી
નામવાળું ઇન્સ્ટન્સ કનેક્ટ થતાં પહેલાં SQL Browserને પોર્ટ પૂછે છે. જો VPN પર નામ નિષ્ફળ જાય પણ tcp:host,port કામ કરે, તો ખાલી જગ્યા ડિસ્કવરીમાં છે.
મોટા ભાગના લોકો SQL Server હોસ્ટનામને સંપૂર્ણ સરનામું ગણે છે, અને VPNને ક્યાં તો મંજૂર કે નામંજૂર ગણે છે. વ્યવહારમાં નામવાળું ઇન્સ્ટન્સ ક્લાયન્ટને DNS પછી બીજી શોધ કરવા મજબૂર કરે છે, અને ટનલ સૌથી વધુ વાર તોડે છે તે ભાગ એ જ શોધ છે. સ્પષ્ટ એન્ડપોઇન્ટ તેને ટાળે છે, તેથી tcp:host,port કામ કરી શકે છે જ્યારે host\INSTANCE સમયસીમા પૂરી કરે છે. ફરક સેવા શોધવા અને તેનો ઉપયોગ કરવાની પરવાનગી મળવા વચ્ચેનો છે.
ભ્રમ: એક હોસ્ટનામ એટલે એક પોર્ટ
હોસ્ટનામ એક સરનામામાં ઉકેલાય છે, અને ત્યાં જ તેનું કામ પૂરું થાય છે. નામવાળું ઇન્સ્ટન્સ એક ઇન્સ્ટન્સ નામ ઉમેરે છે જે સર્વરે TCP પોર્ટમાં અનુવાદિત કરવું પડે, અને ક્લાયન્ટ તેને અનુમાન કરી શકતું નથી. પોર્ટ 1433 ડિફોલ્ટ ઇન્સ્ટન્સ માટેનું ડિફોલ્ટ છે, મશીન પરના દરેક ઇન્સ્ટન્સની ગુણધર્મ નહીં. બંનેને એક જ વસ્તુ ગણવાથી ક્લાસિક લક્ષણ ઊભું થાય છે: ping કામ કરે છે, DNS કામ કરે છે, 1433નું સ્કેન કંઈ દેખાડતું નથી, અને તારણ એ છે કે નેટવર્ક SQLને બ્લોક કરે છે.
બીજી ધારણા પણ એ જ રીતે નિષ્ફળ જાય છે: TCP 1433 ખોલવું પૂરતું છે. જો ઇન્સ્ટન્સ બીજે ક્યાંક સાંભળે છે, તો ખુલ્લો 1433 ફક્ત એ સાબિત કરે છે કે ત્યાં બીજું કંઈક છે. પોર્ટ શ્રોતા સાથે મેળ ખાવો જોઈએ, અને કે શ્રોતા સર્વર બાજુની રૂપરેખાંકન વિગત છે, તે પૂછવું જોઈએ, અનુમાન નહીં.
ક્લાયન્ટ નામવાળા ઇન્સ્ટન્સ સાથે ખરેખર શું કરે છે
હોસ્ટ ઉકેલ્યા પછી ક્લાયન્ટ UDP 1434 પર SQL Server Browserને ડિસ્કવરી વિનંતી મોકલે છે અને પૂછે છે કે નામવાળું ઇન્સ્ટન્સ કયો પોર્ટ વાપરે છે. બ્રાઉઝર સેવા સર્વરની પોતાની રજિસ્ટ્રીમાંથી જવાબ આપે છે, અને પછી ક્લાયન્ટ તે પોર્ટ પર TCP કનેક્શન ખોલે છે. લોગિનનો પ્રયાસ થાય તે પહેલાં બે પ્રોટોકોલ અને બે પોર્ટ સામેલ થાય છે.
nslookup sqlhost.corp.example
nc -vzu sqlhost.corp.example 1434
Get-Service -Name SQLBrowser
તેથી જ ફક્ત UDP બ્લોક થવાથી એવી સમયસીમા થાય છે જે મૃત હોસ્ટ જેવી લાગે. જો બ્રાઉઝર સેવા બંધ કે નિષ્ક્રિય હોય, તો ડિસ્કવરી વિનંતી જવાબ વિનાની રહે છે, છતાં ડેટાબેઝ એન્જિન ચાલુ છે અને તેનો TCP પોર્ટ ખુલ્લો છે. જો ઇન્સ્ટન્સ સ્થિર પોર્ટ પર ગોઠવાયેલું હોય, તો ક્લાયન્ટ તો પણ પૂછે છે, સિવાય કે તેને સીધો એન્ડપોઇન્ટ આપવામાં આવ્યો હોય. આ દરેક નિષ્ફળતા એપ્લિકેશનના ભૂલ સંદેશમાં એકસરખી દેખાય છે, અને તેમને જુદા જુદા સુધારા જોઈએ છે.
બ્રાઉઝર સેવા ડિસ્કવરીની સગવડ છે, ડેટાબેઝ નહીં. તેને બંધ કરવાથી એન્જિન બંધ થતું નથી, અને તેને શરૂ કરવાથી ઇન્સ્ટન્સનો TCP પોર્ટ ખૂલતો નથી.
નામ ન ચાલે ત્યારે સ્પષ્ટ એન્ડપોઇન્ટ કેમ કામ કરે છે
સ્પષ્ટ એન્ડપોઇન્ટ શોધને ક્રમમાંથી દૂર કરે છે: ક્લાયન્ટ તમે નામ આપેલા સરનામા અને પોર્ટ પર સીધું કનેક્ટ થાય છે. તે પહેલાં નિદાન છે, આપોઆપ કાયમી ઉકેલ નહીં, કારણ કે ઇન્સ્ટન્સ પછી ગતિશીલ પોર્ટ પર ફરી ગોઠવાય તો પોર્ટ બદલાઈ શકે છે. તારણ કાઢતાં પહેલાં બંને સ્વરૂપોને એક જ ક્લાયન્ટ અને એક જ ખાતા સાથે સરખાવો.
sqlcmd -S "tcp:sqlhost.corp.example,51433" -U app_login -Q "SELECT @@SERVERNAME"
Test-NetConnection sqlhost.corp.example -Port 51433
જો સ્પષ્ટ સ્વરૂપ સફળ થાય અને નામવાળું સ્વરૂપ નિષ્ફળ જાય, તો ખાલી જગ્યા ડિસ્કવરીમાં છે, અને તેને કેવી રીતે બંધ કરવી તે તમે પસંદ કરી શકો છો: ટનલ દ્વારા UDP 1434ને મંજૂરી આપો, અથવા એડમિનિસ્ટ્રેટરને સ્થિર પોર્ટ પિન કરવા અને એન્ડપોઇન્ટનું દસ્તાવેજીકરણ કરવા કહો. બંને અલગ જાળવણી ખર્ચ સાથેના જાણી જોઈને લીધેલા નિર્ણયો છે. રેન્જમાંનો દરેક પોર્ટ ખોલવો એ બંનેમાંથી એક પણ નથી, અને લાંબા દિવસના અંતે સામાન્ય રીતે એ જ વિકલ્પ સૂચવાય છે. કનેક્શન સ્ટ્રિંગ જ્યાં રહે છે ત્યાં પસંદગી નોંધો.
જો કોઈ પણ સ્વરૂપ કામ ન કરે, તો સમસ્યા ડિસ્કવરીની ઉપર છે. બ્રાઉઝર સેવાને દોષ આપતાં પહેલાં શ્રોતા, માર્ગ અને ઇન્સ્ટન્સ ખરેખર જે પોર્ટ વાપરે છે તેના એક્સેસ નિયમને ચકાસો.
ડિસ્કવરી પછી: પ્રમાણીકરણ અને ઓળખ અલગ છે
લોગિન નિષ્ફળતા સમયસીમાથી અલગ ઘટના છે, અને ટનલ હોવાથી VPN ઓળખ SQL લોગિન બનતી નથી. ક્લાયન્ટ સાચા પોર્ટ પર પહોંચે પછી ડેટાબેઝ એન્જિન તેનું પોતાનું પ્રમાણીકરણ અને પરવાનગીઓ લાગુ કરે છે. બે તબક્કાને એક ટિકિટમાં ભેળવવા એ જ રીત છે જેમાં ડિસ્કવરીની સમસ્યા ખોટી ટીમને સોંપાય છે. કંઈપણ બદલતાં પહેલાં ભૂલ નંબર વાંચો.
જો ડ્રાઇવર સર્વરનું પ્રમાણપત્ર ચકાસે તો દસ્તાવેજીકૃત હોસ્ટનામ રાખો, કારણ કે સંખ્યાત્મક સરનામાથી કનેક્ટ થવું મૂળ સમસ્યા ઉકેલવાને બદલે એ ચકાસણી બદલી શકે છે. તાજેતરના Microsoft ડ્રાઇવર ડિફોલ્ટ રૂપે એન્ક્રિપ્ટ કરે છે, તેથી નામની અસંગતિ સફળ TCP કનેક્શન પછી પ્રમાણપત્ર ભૂલ તરીકે દેખાય છે. તે નવી નિષ્ફળતા નહીં, પ્રગતિ છે.
જે ભ્રમ છોડવો જોઈએ તે એ છે કે SQL Server હોસ્ટનામ સંપૂર્ણ સરનામું છે. તે એક હોસ્ટ છે અને નામવાળા ઇન્સ્ટન્સ માટે એક શોધ ઉમેરાય છે જે ટનલ ન પણ વહન કરે. પોર્ટનું નામ આપો, ડિસ્કવરી માર્ગનું નામ આપો, અને આગલી નિષ્ફળતા કહેશે કે કયો સ્તર સુધારવો છે.