Çoğu insan bir SQL Server ana bilgisayar adını tam bir adres, VPN'i ise izin verilen ya da verilmeyen bir şey olarak görür. Uygulamada adlandırılmış bir örnek, istemciyi DNS'ten sonra ikinci bir aramaya zorlar ve bir tünelin en sık kırdığı kısım tam o aramadır. Açık bir uç nokta bunu atlar, bu yüzden tcp:host,port çalışırken host\INSTANCE zaman aşımına uğrayabilir. Fark, hizmeti bulmakla onu kullanma iznini almak arasındadır.

Efsane: bir ana bilgisayar adı bir port demektir

Ana bilgisayar adı bir adrese çözülür ve işi orada biter. Adlandırılmış örnek, sunucunun TCP portuna çevirmesi gereken bir örnek adı ekler ve istemci bunu tahmin edemez. 1433 portu varsayılan örnek için varsayılandır, makinedeki her örneğin özelliği değildir. İkisini aynı şey olarak ele almak klasik belirtiyi üretir: ping çalışır, DNS çalışır, 1433 taraması hiçbir şey göstermez ve sonuç ağın SQL'i engellediğidir.

İkinci varsayım da aynı şekilde başarısız olur: TCP 1433'ü açmanın yeterli olduğu. Örnek başka yerde dinliyorsa açık bir 1433 yalnızca orada başka bir şey olduğunu kanıtlar. Port dinleyiciyle eşleşmelidir ve dinleyicinin sunucu tarafında bir yapılandırma ayrıntısı olduğunu bu tahmin edilmek yerine sorulmalıdır.

İstemci adlandırılmış bir örnekle gerçekte ne yapar

Ana bilgisayarı çözdükten sonra istemci UDP 1434 üzerinden SQL Browser'a bir keşif isteği gönderir ve adlandırılmış örneğin hangi portu kullandığını sorar. Tarayıcı hizmeti sunucunun kendi kayıt defterinden yanıt verir, ardından istemci o porta bir TCP bağlantısı açar. Bir oturum açma denenmeden önce iki protokol ve iki port devreye girer.

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

Bu yüzden yalnızca UDP engellemesi ölü bir ana bilgisayar gibi görünen bir zaman aşımı üretir. Tarayıcı hizmeti durdurulmuş veya devre dışı bırakılmışsa, veritabanı motoru çalışıyor ve TCP portu açık olsa bile keşif isteği yanıtsız kalır. Örnek statik bir portla yapılandırılmışsa istemci yine de sorar, meğer ki uç nokta doğrudan verilmiş olsun. Bu arızaların her biri uygulamanın hata iletisinde aynı görünür ve farklı düzeltmeler gerektirir.

Tarayıcı hizmeti keşif kolaylığıdır, veritabanı değildir. Durdurulması motoru durdurmaz, başlatılması örneğin TCP portunu açmaz.

Ad çalışmadığında açık uç nokta neden çalışır

Açık bir uç nokta aramayı sıradan çıkarır: istemci, belirttiğiniz adrese ve porta doğrudan bağlanır. Bu önce bir teşhistir, otomatik olarak kalıcı bir düzeltme değildir, çünkü örnek daha sonra dinamik bir porta yeniden yapılandırılırsa port değişebilir. Sonuç çıkarmadan önce iki biçimi aynı istemci ve aynı hesapla karşılaştırın.

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

Açık biçim başarılı olur ve adlandırılmış biçim başarısız olursa eksik olan keşiftir ve bunu nasıl kapatacağınızı seçebilirsiniz: UDP 1434'e tünelden izin verin veya yöneticiden statik bir port sabitlemesini ve uç noktayı belgelemesini isteyin. İkisi de farklı bakım maliyetleri olan bilinçli kararlardır. Aralıktaki her portu açmak ikisi de değildir ve uzun bir günün sonunda önerilme eğiliminde olan seçenek odur. Seçimi bağlantı dizelerinin yaşadığı yere kaydedin.

Biçimlerin hiçbiri çalışmıyorsa sorun keşfin üstündedir. Tarayıcı hizmetini suçlamadan önce dinleyiciyi, rotayı ve örneğin gerçekte kullandığı port için erişim kuralını denetleyin.

Keşiften sonra: kimlik doğrulama ve kimlik ayrıdır

Oturum açma hatası zaman aşımından farklı bir olaydır ve VPN kimliği tünel sayesinde SQL oturum açmasına dönüşmez. İstemci doğru porta ulaştığında veritabanı motoru kendi kimlik doğrulamasını ve izinlerini uygular. İki aşamayı tek bir bilette karıştırmak, bir keşif sorununun yanlış ekibe atanmasının yoludur. Bir şeyi değiştirmeden önce hata numarasını okuyun.

Sürücü sunucu sertifikasını doğruluyorsa belgelenmiş ana bilgisayar adını koruyun, çünkü sayısal adresle bağlanmak özgün sorunu çözmek yerine bu denetimi değiştirebilir. Yeni Microsoft sürücüleri varsayılan olarak şifreler, bu yüzden ad uyuşmazlığı başarılı bir TCP bağlantısından sonra sertifika hatası olarak ortaya çıkar. Bu yeni bir arıza değil ilerlemedir.

Vazgeçilmesi gereken efsane, SQL Server ana bilgisayar adının tam bir adres olduğudur. O bir ana bilgisayar artı adlandırılmış örnek için tünelin taşımayabileceği bir aramadır. Portu adlandırın, keşif yolunu adlandırın ve bir sonraki arıza hangi katmanın düzeltileceğini söyleyecektir.

İlgili makaleler