Anasayfa | Hakkımda | Kitaplarım | RSS Site içinde
Kategoriler
» SQL Server 2012
» SQL Server 2008
» C#
» MySQL
» Hayata Dair
» Güncel Haber-Duyuru
» Bir Soru Bir Cevap
» Oracle ve Diğer VTYS
» Java

MS SQL Server'a Erişmek Hakkında Her şey

21.05.2007 00:00:00
Bir yazılımcı iseniz, SQL Server’a programlarınız içerisinden erişmek sizin için hayati derecede önemlidir. Öncelikle, SQL Server’a erişmek için gerekli C# programcığına göz atacağız. Arkasından, bu programın veritabanına erişmesini engelleyen noktalar üstünde duracağız.

MS SQL Server orta seviye uygulamalarda özellikle tercih edilen bir büyük ve orta ölçekli VTYS olarak kabul görmekte. Ücretsiz sürümü olan SQL Server Express Edition’ı www.microsoft.com da aratarak, indirebilirsiniz. Yazılımın en son 2005 versiyonu ve bu versiyon için de 2.servis paketi yayınlandı. İlgili yamaları da üreticinin web adresinden indirebilirsiniz. Bu bölümde örnekler için dilimiz C#. VB.NET ve benzeri kodlara rahatlıkla dönüşüm yapıp kullanabileceğinizi düşünüyorum.

SQL Server’a erişim ve erişim sorunlarş ile başa çıkabilmek

SQL Server’a erişecek en basit bir C# kodu aşağıdaki gibi olabilir:

Bu kodlarda, ADO.NET temel nesnelerinden Connection, Command ve DataReader nesnelerini kullandık.

Visual Studio kurulu ise, bir Console Application türünden proje başlatıp, Istemci.cs adında yeni bir sınıf açarak örneğimizi çalıştırabilirsiniz.

Şekil-1: İstemci taraftan verilere erişimin programlanması

şayet işler yolunda ise, yukarıdaki şekilde bir sonuç ile karşılaşırsınız. Ancak genelde aksi bir durum ile karşılaımanız muhtemeldir. Bu türden bir ekranı aşağıda görebilirsiniz.

şekil-2: İstemci tarafın SQL Server’a erişememesi sonucu oluşan hatalardan biri.

Bu türden hataların nedenleri şunlardan biri olabilir:

  1. istemci bilgisayardaki bağlantı ifadesi yanlış yazılmıştır veya SQL Server erişim uygulama arayüzü tarafından anlamlandırılamayan öğeler içeriyordur.
  2. SQL Server’da ilgili kullanıcı yoktur veya kullanıcı olmasına rağmen, SQL Server sadece Windows kullanıcılarının erişimine açık, SQL Server kullanıcıların erişimine kapalıdır.
  3. SQL Server ile istemci yazılım farklı bilgisayarlarda ise, SQL Server’ın üstünde kurulu olduğu bilgisayarda Windows Firewall açıktır ve SQL Server’a erişilmesini engelliyordur.

şimdi bütün bu sorunların çözümünü teker teker ele alalım:

1.Bağlantı İfadesi Problemlerine Çözüm Önerileri

Yukarıdaki örneğimizde, bağlantı ifadesi şu şekildedir:

Data Source=.\yukon;user ID=webuser;password=zor1~sifre;Initial Catalog=dukkan

Bu ifadede yer alan bilgiler aşağıda verilmiştir.

Parametre İşlev
Data Source SQL Server’ın ağdaki adı.
User ID SQL Server üstünde bir kullanıcı.
ObjectDataSource İş nesnelerinden gelen verileri saklar.
Password Kullanıcıya ait şifre.
Initial Catalog Bağlanılacak olan veritabanı adı
Tablo-1: Bağlantı ifadesi parametreleri ve işlevleri

Bir bağlantı ifadesinde nokta yerel sunucuyu, .\yukon ise yerel sonucu üstünde kurulu bir SQL Server yazılımını ifade etmekte.Ancak nokta(.) her zaman doğru bir ifade olmayabilmektedir. Bunun yerine alternatif olarak aşağydaki değerleri teki tek yazarak çalışıp test edebilirsiniz:

(local)

(localhost)

127.0.0.1

127.0.0.1,1433 (Burada 1433 SQL Server’yn kurulu olduğu portu ifade etmektedir. Başka bir porta kurulu ise doğru port bilgisi ile değiştirebilirsiniz)

Halen erişim problemi varsa protokol olarak ek bilgi verebilirsiniz.

Network Library=DBMSSOCN

Bütün bunlardan sonra, bir bağlantı ifadesi aşağıdaki gibi olabilir:

Data Source=(local)\yukon;user ID=webuser;password=zor1~sifre;Initial Catalog=dukkan, Network Library=DBMSSOCN

2.Kullanıcı Problemlerine Çözüm Önerileri

Bazı durumlarda SQL Server’a erişim ifadeleriniz doğru olmasına rağmen, erişim ifadesinde yer alan kullanıcının haklarının yeterli olmaması veya şifresinin doğru olmaması gibi sorunlar da istemci yazılımınızın kırılmasına neden olabilir.

SQL Server’ın yetkilendirme modunu kontrol etmek için, Management Studio aracını kullanarak, SQL Server’i sa? tıklayıp properties menüsünden security yan sekmesini tıklayarak aşağıdaki ekrana ulaşabilirsiniz. Bu ekranda seçili olarak Windows Authentication seçili ise SQL Server and Windows Authentication yapın.

şekil-3: SQL Server’in yetkilendirme modunun değiştirilmesi

Bu ayarı yaptıktan sonra SQL Server’i yeniden başlatmanız gerekir. Aksi halde ayarlarınız bir sonraki yeniden başlatım işlemine kadar geçerli olmayacaktır.

SQL Server erişim sorununuzun halen devam ettiğine inanıyorsanız ve buraya kadarki seçenekler çözüm olmadı ise erişmeye çalıştığınız kullanıcının gerçekten var olup olmadığına bakın. Bu kontrol için de Management Studio aracından yararlanacağız.

SQL Server ‘da açtığınız bir veritabanına erişim için iki aşamalı bir kullanıcı oluşturma işlemi yapmak gerekir:

1. SQL Server’a erişecek bir login: Login bilgileri, sadece SQL Server alanına giriş için kullanılabilir. Bir user ile ilişkilendirmek sureti ile dışarıdaki uygulamaların bir veritabanına da erişim sağlanmasında kullanılır. SQL Server’da Security\Logins sekmesinden erişilebilir.

2.İlgili veritabanına erişecek bir kullanıcı: Login bilgisi, bir kullanıcı tanımı ile herhangi bir veritabanına erişebilir. Herhangi bir veritabanı içerisindeki Security\Users menüsünden erişilebilir. Bir veritabanı kullanıcısının verileri görebilmesi için en az seçme hakkının verilmesi gerekir. Veritabanı kullanıcısına bütün hakları vermek için db_owner adlı database role’üne bağlayabilirsiniz. Ancak bu güvenlik açısından oldukça büyük riskler taşır.

şekil-4: Bir veritabanı kullanıcısına db_owner rolünün verilmesi

Bütün bunların dışında, login aşamasında verdiğiniz şifre ile bağlantı ifadesinde yer alan şifrenin aynı olması gerekir.

Bu konuda son olarak, bir veritabanını deattach edip uzaktaki bir SQL Server’a yeniden attach ettinizse, kullanıcı ver logini silip yeniden oluşturmanız gerekir. Çünkü login bilgisi bir sunucuya özgüdür ve veritabanı taşınsa bile karşıdaki sunucuda aynı bilgilerle örtüşmeyebilir.

3.Firewall Problemlerine Çözüm Önerileri

Başka bir erişim sorunu kaynağı olarak Firewall engelini değerlendirmelisiniz. Buraya kadar her şey yolunda ise firewall kaynaklı bir erişim sorunu olup olmadığını anlamak için, SQL Server’ın üstünde kurulu olduğu bilgisayardaki Windows Güvenlik Duvarı bileşenine denetim masası aracılığı ile erişin ve açık olup olmadığına bakın.

şayet bu firewall açık ise kapatabilirsiniz ancak bu da bir güvenlik açığına neden olabilir. Bu türden riskli bir çözüme bir alternatif olarak güvenlik duvarına SQL Server için istisnai durum ayarı girip sadece bu program tarafından kullanılan portları açabilirsiniz. Bu türden bir durum için örnek resim olarak şekil-5 ‘e göz atabilirsiniz.

şekil-5: Bir sistemde güvenlik duvarının çalışıp çalışmadığına bakmak.

Firewall ayarlarından, özel durumları tıklayın ve bağlantı noktası ekle butonunu tıkladıktan sonra açılan ekranı aşağıdaki şekilde doldurup Tamam’ı tıklayın. Böylelikle sadece SQL Server’a gelen istekler için yetkilendirme yapmış olduk.

Şekil-6: Güvenlik duvarına bir istisnai durum eklemek.

Windows güvenlik duvarı dışında istemci uygulama ile SQL Server arasında başka firewall’lar varsa ilgili ayarları bu firewall’lara da girmeniz gerektiğini unutmayın.

MS SQL Server’i Türkleştirmek

Genelde en çok karşılaşılan sorunlardan biri, uygulamanın geliştirme işlemi sırasında veritabanı ile uygulama arasındaki dil uyumunun, uygulama çalışacağı sunucuya taşındığında çeşitli karakterlerin sorunlu olarak görünmesi veya tarih formatının istenilen biçimde olmaması gibi sorunlarla karşılaşmak muhtemeldir. Bu türden durumlarla yüzleşmemek için, bir uygulamayı tasarlarken bazı noktalara dikkat etmeniz ilerleyen aşamalardaki işlerinizi kolaylaştırabilir.

Karakter sorunları ile başa çıkmak

Karakter sorunları ile başa çıkabilmek için yapılması gereken ilk şey, işletim sistemi seviyeli karakter ve dil ayarlarına güvenmeyip, veritabanı seviyeli collation ayarlarını kullanmaktır. Aşağıdaki şekilde bu türden bir ayarlamanın açılmış bir veritabanı için nasıl yapılması gerektiği gösterilmektedir. İlgili pencereye ulaşmak için, Management Studio aracından, ilgili veritabanına sağ tıkladıktan sonra properties menüsünü tıklamanız yeterlidir.

Şekil-7: Bir veritabanı için, verileri girmeden önce, dil ayarını Turkish_CI_AS yapmak bir çok dil probleminden sizi kurtarabilir.

Ancak bu türden bir ayarlamanın tamamen sorununuzu çözebilmesi için yapılması gereken başka ayarlamalar da gerekebilir. Bunlardan bir tanesi, metin girilecek alanlarınız için özel Collation ayarlaması yapmayıp, <Database Default> ayarlaması ile idare etmenizdir. şayet önceden kalma bir ayarlama mevcut ise sildiğiniz anda database default olarak değişecektir. Bu türden bir örnek Şekil-8’de gösterilmiştir.

şekil-8: Metin girilecek alanlar için Collation ayarlarını veritabanı ile eşit hale getirmek.

Bu iki ayarlamayı yapmanız, temel karakter sorunları ile baş edebilmeniz için yeterli olacaktır.

Tarih formatı

En az Türkçe karakter sorununu kadar çok uğraştıran başka bir sorun olarak SQL Server üstündeki tarih formatı sorunu da baş ağrıtabilmektedir. Bu türden bir sorunun varlığını anlamak için geliştirdiğiniz istemciden 14.12.2005 gibi 12’den büyük bir gün içeren tarih bilgisini veritabanına yazmaya çalışın(INSERT veya UPDATE ) bu durumda şayet ifadeniz bir tarih formatı aşımı hatası veriyorsa muhtemelen tarih formatınız gg.aa.yyyy yerine aa.gg.yyyy bekleniyor demektir.

Bu sorun ile başa çıkabilmek için yapılması gereken ayarlamaları bu kısımda ele alacağız. ilk olarak 1.başlıkta login oluşturmak bahsinde ele aldığımız şekilde bir uygulama logini oluştururken, bu logine ait dil ayarının Türkçe olarak seçilmesi, veritabanına gönderdiğiniz tarihlerin gg.aa.yyyy formatında kabul edilmesini sağlayacaktır.

şekil-9: Veritabanınıza giden tarihlerin gg.aa.yyyy olarak algılanması için veritabanı uygulama login bilgisi için dil ayarı yapılması.

Ancak bu ayarlama, veritabanından okuduğunuz tarihlerin Türkçe tarih formatı ile gelmesini sağlamaya yetmeyebilir. İlgili veritabanı için default dil ayarını Turkish olarak değiştirmeniz, bu türden bir sorunu da çözmek için yeterli olacaktır. Bu türden bir ayarlama için şekil-9’a göz atabilirsiniz.

şekil-10: bir veritabanı için default dil ayarının Turkish yapılması.

Son olarak, herhangi bir tarih sütunundaki verileri CONVERT fonksiyonu ile de Türkiye tarih formatına çevirebilirsiniz. Bunun için günün tarihini seçip, Türkiye formatı ile gösteren bir sorgu aşağıdaki gibi olabilir. Buradaki 104 parametresi gösterim formatını tayin etmektedir. GETDATE() ise SQL Server’in tarihini okuyan bir fonksiyondur.

SELECT CONVERT(VARCHAR(10),GETDATE(),104)

Sonuç

Sonuç olarak, bu bölümde SQL Server üstünde bir veritabanı uygulaması geliştirmeye başlamanın ilk aşamasında veya ilerleyen bölümlerinde yüzleşilmesi muhtemel sorunları sizlerle paylaşıp olayın en başında önlem alabilme yollarını özetlemeye çalıştım.

Bir sonraki bölümde görüşmek üzere…

Gelecek Bölümde, SQL Server’da alınması gereken temel güvenlik önlemlerinini ele alacağız.

Yorumlar

a yorumladı(02.07.2010 17:50:09)
a
d


Hakan yorumladı(10.10.2010 23:02:51)
Beğendim
Özellikle olası sorunları yazmanızı çok beğendim . Elinize sağlık


SBL yorumladı(30.11.2010 20:10:01)
Eline saglık
Emeğine sağlık, kodları VB ilede versen cok daha güzel olurdu..


gökhan yorumladı(22.01.2011 19:25:04)
bravo dogrusu
gerçekten çok faydalı bir yazı olmuş teşekkürler.


Melih MERCAN yorumladı(01.02.2012 11:01:22)
sql server a bağlantı şeklini kullanıcı tanımlı yapsak
Yani server adı veya adresi, db adı, user name ve pass gibi bilgileri kullanıcı textbox a elle girdikten sonra server a bağlan dese nasıl olur merak ediyorum ve araştırıyorum.



Konuya müdahil olmak ister misiniz?
Başlık:  
İsim  :  
URL   :
Yorum