|
|
|
|
|
 |
SQL Habergrubu |
|
 |
|
En Son SQL Server ile İlgili Okuduğum Kitaplar |
- Accelerated SQL Server 2008 - Apress (İngilizce)
- Designing and Optimizing Data Access by Using SQL Server 2005 - MS Press (İngilizce)
- Microsoft SQL Server 2005 Database Solutions Design - Wiley Publishing (İngilizce)- Optimizing and Maintaining a Database Administration Solution by Using SQL Server 2005 - MS Press (İngilizce)- Designing a Database Server Infrastructure Using SQL Server 2005 - MS Press (İngilizce)- SQL Server 2005 Implementation and Maintenance - MS Press (İngilizce)
- SQL Server 2005 Administrators Companion - MS Press (İngilizce) |
|
|
|
SQL Server 2005: Uzaktan Bağlantı
|
Son güncelleme tarihi: 10 Temmuz 2008
Merhabalar,
Bir SQL Server Instance' ına uzaktan
bağlanma konusunda gerek forumlardan gerekse habergruplarından çok soru geliyor.
En güzeli bu konuda bir yazı yazmak dedim ve bu makaleyi klavyeye(!) (kaleme?) aldım.
Bir SQL Server Instance' ına uzaktan bağlanabilmeniz için, kurulu olan SQL Server
Instance' ının sürüm (Edition) bilgisi, SQL Server Instance' ının üzerinde kurulu
olduğu İşletim Sistemini bilgisi öncelikle dikkate almanız gereken bilgilerdir.
Peki neden? Çünkü, meselâ
SQL Server 2005' in Express Edition ve Developer Edition'
larında, uzaktan bağlantı için kullanılabilecek TCP/IP ve Named Pipes protokolleri
kapalıdır. Bu protokoller konusunda daha fazla bilgi almak için
Bağlantı Protokolleri
isimli yazımı okuyabilirsiniz.
Windows XP SP2 ve Windows' un daha sonraki sürümlerinde ise Windows Güvenlik Duvarı
vardır ve bu uygulama etkin olduğunda SQL Server 2005 Instance' ınıza uzaktan erişimi
engeller. Çünkü varsayılan olarak SQL Server' ın kullandığı portlar Windows Güvenlik
Duvarında açık değildir.
Uzaktan Bağlantı için Yapılması Gerekenler
1 - SQL Server Instance' ınızın ilgili protokolünün yapılandırılması,
2 - Eğer varsa ve etkinse, Windows Güvenlik Duvarının yapılandırılması
3 - SQL Server' ınıza bağlanabilmeniz için kullanacağınız Login.
1- SQL Server Protokollerinin Yapılandırılması:
SQL Server 2005 Instance' ınız için hangi protokolü kullanacağınızı belirledikten
sonra, bu protokolün yapılandırmasını gerçekleştirirsiniz. SQL Server protokollerinin
yapılandırılması işlemleri için SQL Server 2005 ile birlikte gelen SQL Server Configuration
Manager' ı kullanabilirsiniz. (Başlat\Programlar\Microsoft SQL Server 2005\Configuration
Tools) Konuya örnek olması için aşağıda TCP/IP protokolünün nasıl yapılandırılabileceğini
anlatacağım.
TCP/IP Yapılandırması Örneği:
SQL Server 2005 Instance' ınıza uzaktan yapılacak bağlantılarda kullanılacak TCP/IP
protokolünü yapılandırmak için SQL Server Configuration Manager' ı başlatın.
Daha sonra, Şekil-1' de de gösterdiğim gibi SQL Server 2005 Network Configuration
düğümü altından uzaktan bağlantı kurulmasını istediğiniz SQL Server 2005 Instance'
ınızı seçin. Benim örneğimde bu, TEST2 Instance' ı olacak.

Şekil-1 |
TCP/IP protokolünü etkinleştirmek veya etkin olduğundan emin olmak için, Şekil-1'
de de gösterildiği gibi Protocol Name alanındaki TCP/IP protokolünün Status değerine
bakabilirsiniz. "Enabled" etkin olduğu anlamına gelir, "Disabled" ise etkin değil
demektir. Bu değeri değiştirmek için TCP/IP protokolünün üzerinde fare ile çift
tıklayın veya TCP/IP protokolünün üzerinde farenin sağ tuşuna tıklayarak, açılan
menüden "Properties" seçeneğine tıklayarak "TCP/IP Properties" penceresini açın.
Şekil-1' de gösterildiği gibi "TCP/IP Properties" penceresi açılacaktır. TCP/IP
protokolünü etkinleştirmek için, "TCP/IP Properties" penceresindeki "Protocol" isimli
sekmede bulunan "Enabled" etiketinin karşısındaki aşağı açılır listeden "Yes" değerini
seçin.
"Protocol" sekmesindeki "Listen All" seçeneği önemli bir seçenek bu nedenle buna
da değinmek istiyorum. "Listen All", bilgisayara bağlı tüm Ağ Kartlarının (Örn:Ethernet)
IP adreslerinin SQL Server tarafından dinlenip dinlenmeyeceğini belirler. Eğer bu
seçeneğin değeri "No" yapılırsa, biraz sonra da değineceğim gibi "IP Addresses"
sekmesindeki her IP adresini tek tek yapılandırmanız gerekir ve gene aynı sekmede
bulunan "IPAll" seçeneklerinin herhangi bir geçerliliği kalmaz. Eğer değeri "Yes"
yaparsanız, o zaman gene "IP Addresses" sekmesindeki "IPAll" seçenekleri etkinleşir
ve diğer tüm IP adreslerine uygulanır. "Listen All" u etkinleştirdikten sonra "IPAll"
seçeneğindeki ayarların, diğer ayarları bastıracağı unutmayın, yoksa ileriki paragraflarda
aklınız karışabilir.
TCP/IP protokolünün IP adresi veya Port ayarlarını yapılandırmak için, gene "TCP/IP Properties"
penceresinde bulunan "IP Addresses" isimli sekmeye tıklayın. (Bakınız: Şekil-2)

Şekil-2 |
Bu listede her Ağ Adaptörünüz için bir IP ayar bölümü listelenecektir.
Hangisinin etkinleştirilmesini istiyorsanız, onun "Active" ve "Enabled" ayarlarının
karşısındaki değerleri "Yes" durumuna getirin. "Active", o IP adresinin dinleneceğini
belirtir. "Enabled" ise o IP adresinin kullanılıp kullanılmayacağını. "IP Address"
bölümde ise IPv4 veya IPv6 değeri yer alır. Eğer "TCP Dynamic Ports" etiketinin
değeri "0" ise, bunun anlamı bu IP adresi için kullanılacak portun dinamik bir şekilde
belirleneceğidir. Bu durumda SQL Server, bu IP adresi için müsait olan bir port
numarası atayacaktır.
Meselâ Şekil-2' deki örnekte, TEST2 SQL Server Instance' ı, Dinamik Port olarak
atanan 51495 portunun tüm IP' ler tarafından dinlenilmesi için yapılandırılmış.
(Bu örnekte, "Protocol" sekmesindeki "Listen All" değerinin "Yes" olduğunu Şekil-1' den anımsayın, aksi takdirde
IPAll değerlerinin bir geçerliği olmadığını daha önceki paragraflarımdan hatırlıyor
olmalısınız.) Eğer tüm IP' lerin durağan bir IP kullanmasını isteseydik, o zaman
"TCP Dynamic Ports" un değerini boş bırakıp, TCP Port' un değerine, kullanılmasını
istediğimiz IP numarasını yazacaktık. Bu amaçla, 65535' e kadar müsait bir port
numarası seçebilirsiniz.
Şimdi aklınıza şu da takılıyor olabilir, "biz dinamik port kullanacağımız zaman
TCP Dynamic Port' s 0 yazıyoruz, nasıl oluyor da orada şimdi 51495 yazıyor?" Çünkü
SQL Server bu IP' ye bir dinamik IP atadığı zaman, 0 yerine bu dinamik IP' yi görüyorsunuz.
Şekil-2' de gördüğünüz gibi 192.168.2.2 numaralı IP için iki tane port numarası
kullanılmış. Eğer bir IP' nin birden çok port kullanmasını istiyorsanız, o zaman
birden çok Port numarasını virgüllerle ayırarak yazabilirsiniz. Bu IP' ye Port numaraları
yazılmış, ama peki IPAll' da da dinamik port (51495) kullanıyoruz? Hangisi geçerli
olacak? Hemen bir kaç paragraf önceki yazımdan da hatırladığınızı varsayıyorum!
Neydi? Eğer "Protocol" sekmesindeki "Listen All" un değeri "Yes" ise, o zaman IPAll'
da yazan değerler, diğer değerleri bastırırdı. Yani bu durumda, eğer "Listen All"
un değeri "No" olsaydı, 192.168.2.2 numaralı IP, 51495 numaralı dinamik portu değil,
16666 ve 46123 numaralı statik portları kullanacaktı. Bu kadar örnekten sonra bu
kavramların oturtuğunu varsayıyorum.
SQL Server Instance' ınıza uzaktan bağlanabilmek için size durağan (Static) portları
kullanmanızı tavsiye ederim. Bu nedenle, Şekil-2 deki "TCP/IP Properties" penceresindeki
ilgili IP' nin "TCP Dynamic Ports" etiketinin değerini boş bırakmanızı tavsiye ederim.
Yani orada ne "0" ne de başka bir değer yazmasın ve gene aynı penceredeki "TCP Port"
etiketinin değerine müsait bir port numarası girin ve bu ayarların geçerli olabilmesi
için, protokolün ait olduğu SQL Server Instance' ının SQL Server servisini durdurup
tekrar başlatın.
Peki SQL Server Instance' ınızın hangi port numarasını dinlediğini nasıl teyit edeceksiniz?
Bunun için Komut İstemcisi (Command Prompt) u kullanabilirsiniz. Komut İstemcisini
çalıştırın (Başlat\Çalıştır ve tırnak içindeki komutu yazın "cmd" ve çalıştırın.)
O anki TCP/IP bağlantılarını ve protokol istatistiklerini görüntüleyebilmemiz için
Komut İstemcisinde Netstat komutunu kullanabiliriz. Hangi Protokolün ve IP numarasının
hangi portu kullandığını ve durumunu görüntülemek için "Netstat -a" komutunu kullanacağız.
Bu komut hakkında daha fazla bilgi alabilmek için Komut İstemcisindeyken "Netstat
-?" komutunu çalıştırabilirsiniz.
Aşağıdaki Şekil-3' te "Netstat -a" komutunu çalıştırdıktan sonra nasıl bir görüntüyle
karşılaşacağınızı görebilirsiniz.

Şekil-3 |
Beyaz çerçeve ile işaretlediğim aralıkta, 192.168.2.2 IP numaralı SQL Server sunucumuzun
16666 ve 46123 numaralı portları dinlediğini (LISTENING) görebilirsiniz.
2 - Windows Güvenlik Duvarının Yapılandırılması:
Bu konuda Microsoft tarafından yazılmış bir makale zaten mevcut için benim bu konuda
daha fazla bir şey yazmama gerek kalmıyor.
Buraya tıklayarak
bahsini ettiğim makaleye ulaşabilirsiniz.
Ahh ama bir şey de eklemeden edemeyeceğim! Bazı durumlarda bu işlemleri yapmanın
da yetersiz kaldığını gördüm. Meselâ bir müşterimiz tüm bunları yaptığı halde gene
de uzaktaki SQL Server sunucusuna bağlanamıyordu. Nedeni ise, modemindeki Güvenlik
Duvarı ve kısıtlamalardı. Yani, modeminizdeki yapılandırmayı da gözden geçirmenizde
yarar var. Aksi takdirde günlerce uğraşır sorunu çözemezsiniz...
3- Login:
Çoğunuzun bildiği gibi SQL Server' da Authentication Mode (Yetkilendirme
Modu) olarak iki adet seçeneğimiz bulunuyor. Birisi Windows Authentication, diğeri
ise SQL Authentication (veya Mixed Authentication).
Windows Authentication' ı sadece güvenilir ortamlarda kullanabilirsiniz. Nedir güvenilir
ortamlar? Meselâ aynı Domain' in parçasıysanız güvenik ilişkisi olan bir ortamdasınızdır.
Eğer yetkileriniz izin veriyosa, kendi Domain hesabınızla aynı Domain' in parçası
olan diğer kaynakları kullanabilirsiniz. Bizim konumuzla alâkalı bir örnek vermek
gerekirse, SQL Server Instance' ınıza bir Domain Güvenlik Grubunun bir üyesi olarak
veya bir Domain hesabıyla bağlanabilirsiniz. SQL Server için herhangi bir şifre
girmenize de gerek kalmaz. Mümkün olan her senaryoda bu Authentication Mode' unu
kullanmanızı tavsiye ederim. SQL Authentication' dan çok daha güvenlidir. Zaten
Microsoft' da bunu tavsiye eder ve dokümanlarında da SQL Authentication' ı sadece
geriye destek için hâlâ barındırdıklarını söylüyorlar.
SQL Login deyince benim aklıma hemen "sa" geliyor. Çünkü kullanıcıların yaptığı
bu yanlışı o kadar çok gördüm ki...
Arkadaşlar! Lütfen her şey için "sa" hesabını kullanmayın! KULLANMAAAAYIN! Çünkü
"sa" hesabı "sysadmin" sabit sunucu rolü üyesi (ve bu rolden çıkarılamaz) bir hesaptır.
SQL Server 2005 Instance' ınızı kurarken Authentication Mode olarak eğer Windows
Authentication' ı seçmiş iseniz, o zaman "sa" hesabı otomatik olarak kullanılamaz
olacaktır. Tabi ta ki siz onu etkinleştirip, Authentication Mode' unu da Mixed Authentication
yapmadığınız sürece. Eğer SQL Server 2005 Setup' taki Authentication Mode bölümünde
Mixed Authentication' ı işaretlediyseniz, o zaman "sa" hesabı kullanılabilir olacaktır.
"sa" hesabını neden kullanmamalıyız konusuna
SQL Server 2008: Güvenlik ile ilgili değişiklikler
isimli yazımda deyinmiştim. Tekrar tekrar aynı şeyleri yazmanın gereği yok, o yüzden
ilgilenenler, o yazımdaki "sa" hesabıyla ilgili yazdıklarımı okuyabilirler.
Eğer bağlanacağınız SQL Server Instance' ı ile güvenilir bir ortamda değilseniz,
o zaman SQL Authentication yoluyla bir SQL Login kullanarak bağlanabilirsiniz.
Login hakları ise bu konunun ötesinde bir konu.
Ekrem Önsoy
|
|
Anasayfa |
|