Instance bernama SQL Server lewat VPN: penemuan, bukan port 1433
Instance bernama menanyakan port ke SQL Browser sebelum terhubung. Jika nama gagal lewat VPN tetapi tcp:host,port berhasil, penemuan adalah celahnya.
Sebagian besar orang menganggap nama host SQL Server sebagai alamat lengkap, dan VPN sebagai sesuatu yang diizinkan atau tidak. Dalam praktiknya, instance bernama memaksa klien melakukan pencarian kedua setelah DNS, dan pencarian itulah bagian yang paling sering dirusak oleh terowongan. Endpoint eksplisit menghindarinya, karena itu tcp:host,port bisa berhasil sementara host\INSTANCE kehabisan waktu. Perbedaannya adalah antara menemukan layanan dan mendapat izin untuk memakainya.
Mitos: satu nama host berarti satu port
Nama host diselesaikan menjadi alamat, dan di situ tugasnya berakhir. Instance bernama menambahkan nama instance yang harus diterjemahkan server ke port TCP, dan klien tidak bisa menebaknya. Port 1433 adalah default untuk instance default, bukan sifat setiap instance di mesin. Memperlakukan keduanya sebagai hal yang sama menghasilkan gejala klasik: ping berhasil, DNS berhasil, pemindaian 1433 tidak menunjukkan apa pun, dan kesimpulannya jaringan memblokir SQL.
Asumsi kedua gagal dengan cara yang sama: bahwa membuka TCP 1433 sudah cukup. Jika instance mendengarkan di tempat lain, 1433 yang terbuka hanya membuktikan ada hal lain di sana. Port harus cocok dengan listener, dan bahwa listener adalah detail konfigurasi di sisi server, itu harus ditanyakan bukan diasumsikan.
Apa yang sebenarnya dilakukan klien dengan instance bernama
Setelah menyelesaikan host, klien mengirim permintaan penemuan ke SQL Server Browser lewat UDP 1434 dan menanyakan port mana yang dipakai instance bernama. Layanan browser menjawab dari registri server itu sendiri, lalu klien membuka koneksi TCP ke port tersebut. Dua protokol dan dua port terlibat sebelum login bahkan dicoba.
nslookup sqlhost.corp.example
nc -vzu sqlhost.corp.example 1434
Get-Service -Name SQLBrowser
Karena itu pemblokiran hanya UDP menghasilkan waktu habis yang tampak seperti host mati. Jika layanan browser dihentikan atau dinonaktifkan, permintaan penemuan tetap tidak terjawab meskipun mesin basis data berjalan dan port TCP-nya terbuka. Jika instance dikonfigurasi dengan port statis, klien tetap bertanya kecuali endpoint diberikan langsung. Setiap kegagalan itu tampak sama dalam pesan kesalahan aplikasi, dan masing-masing memerlukan perbaikan berbeda.
Layanan browser adalah kemudahan penemuan, bukan basis data. Menghentikannya tidak menghentikan mesin, dan menjalankannya tidak membuka port TCP instance.
Mengapa endpoint eksplisit berhasil saat nama tidak
Endpoint eksplisit menghapus pencarian dari urutan: klien terhubung langsung ke alamat dan port yang Anda sebutkan. Itu pertama-tama diagnostik, bukan otomatis perbaikan permanen, karena port bisa berubah jika instance kemudian dikonfigurasi ulang ke port dinamis. Bandingkan kedua bentuk dengan klien dan akun yang sama sebelum menarik kesimpulan.
sqlcmd -S "tcp:sqlhost.corp.example,51433" -U app_login -Q "SELECT @@SERVERNAME"
Test-NetConnection sqlhost.corp.example -Port 51433
Jika bentuk eksplisit berhasil dan bentuk bernama gagal, penemuan adalah celahnya, dan Anda dapat memilih cara menutupnya: izinkan UDP 1434 melalui terowongan, atau minta administrator menetapkan port statis dan mendokumentasikan endpoint. Keduanya keputusan sengaja dengan biaya perawatan berbeda. Membuka setiap port dalam rentang bukan keduanya, dan itulah opsi yang cenderung diusulkan pada akhir hari yang panjang. Catat pilihannya di tempat string koneksi berada.
Jika tidak ada bentuk yang berhasil, masalahnya berada di hulu penemuan. Periksa listener, rute, dan aturan akses untuk port yang benar-benar dipakai instance sebelum menyalahkan layanan browser.
Setelah penemuan: autentikasi dan identitas terpisah
Kegagalan login adalah peristiwa berbeda dari waktu habis, dan identitas VPN tidak menjadi login SQL karena adanya terowongan. Begitu klien mencapai port yang benar, mesin basis data menerapkan autentikasi dan izinnya sendiri. Mencampur kedua tahap dalam satu tiket adalah cara masalah penemuan ditugaskan ke tim yang salah. Baca nomor kesalahan sebelum mengubah apa pun.
Pertahankan nama host yang terdokumentasi jika driver memvalidasi sertifikat server, karena terhubung lewat alamat numerik dapat mengubah pemeriksaan itu alih-alih menyelesaikan masalah semula. Driver Microsoft terbaru mengenkripsi secara default, sehingga ketidakcocokan nama muncul sebagai kesalahan sertifikat setelah koneksi TCP berhasil. Itu kemajuan, bukan kegagalan baru.
Mitos yang harus ditinggalkan adalah bahwa nama host SQL Server adalah alamat lengkap. Itu adalah host ditambah, untuk instance bernama, pencarian yang mungkin tidak dibawa terowongan. Sebutkan port, sebutkan jalur penemuan, dan kegagalan berikutnya akan memberi tahu lapisan mana yang harus diperbaiki.