Sql Sunucusunda Birden Fazla Üyelik Sistemi Barındırma

Yazar: Cenk Özdemir
Kategori: ASP.NET
Eklenme Tarihi: 13.5.2009 01:39:40



Herkese Merhabalar,Bu makalede; bir SQL sunucusunda çok sayıda üyelik sistemini nasıl çalıştıracağımızı, ilgili ayarları nasıl konfigüre etmemiz gerektiğinizi incelemeye çalışacağız.

Bu makalede; bir SQL sunucusunda çok sayıda üyelik sistemini nasıl çalıştıracağımızı, ilgili ayarları nasıl konfigüre etmemiz gerektiğinizi incelemeye çalışacağız. ASP.NET 2.0 ile birlikte gelen Login kontrolleri, birkaç tıklama ve sürükle-bırak ile bir üyelik sistemi oluşturmamıza imkan sağlıyor. Fakat işlerin bu kadar basite indirgenmiş olmasıyla birlikte, bir takım kısıtlamalardan da söz etmek mümkün. Bunlardan en fazla can sıkanı da, üye bilgilerini tutan veritabanının ./SQLEXPRESS üzerinde çalışmak zorunda olması. (Elbette machine.config dosyasında yapılan ayarlar ile farklı bir sql sunucusuna yönlendirmede yapabiliriz.) Eğer sisteminizde, SQL’in daha yüksek bir sürümü kuruluysa; projenizin App_Data klasörü altında oluşturulmuş standart bir aspnetdb veritabanı yerine, kendi yarattığınız veritabanıyla çalışmak istemeniz olası bir durumdur. Şimdi bu ihtiyaçlar doğrultusunda, konfigürasyon ayarlarımızı nasıl şekillendirmemiz gerektiğini bir örnek üzerinde incelemeye çalışalım.
 
A ve B şirketleri için iki web uygulaması tasarlamak istediğimizi ve bu uygulamalarda kullanılmak üzere iki ayrı üyelik sistemine ihtiyacımız olduğunu düşünelim. İşlem basit görünüyor. Ortada iki ayrı üyelik sistemi varsa, iki de ayrı veritabanına ihtiyacamız olacaktır. Öyleyse, öncelikle bu iki veritabanını yaratacağız. Daha sonra uygulamaların içinden, kimin hangi veritabanıyla ilişkilendirileceğini söyleyeceğiz.


 Eğer üyelik sistemlerini SQLEXPRESS’ de çalıştıracaksak, herhangi bir ayar yapmamıza gerek yoktur. Çünkü Login kontrollerini kullandığımızda, varsayılan ayarlar doğrultusunda , veritabanımız otomatik olarak yaratılacak ve uygulamamızın App_Data klasöründe aspnetdb.mdf adıyla yer alacaktır.
 

A Şirketi Projesi

1-A şirketi için yeni bir web uygulaması yaratarak işe başlayalım.

2-Uygulamamızı yarattıktan sonra, solution explorer penceresinde, projeye sağ tuşla tıklayarak add file seçeneğine gelelim ve bir de web.config dosyası (web configuration file-web konfigursayon dosyası) ekleyelim.

3-Açılan web.config dosyamızda ilk önce, aşağıdaki düzenlemeleri yapalım.

<compilation debug="true"/>
 

compilation debug : Projenin debug edilip edilmeyeceğini belirtir.

<authentication mode="Forms">
  <forms loginUrl="Login.aspx"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>
 

authentication mode : Form tabanlı doğrulama yapılacağını söyler.

loginUrl : Projemizin login sayfası. Giriş izni gereken sayfa çağrıldığında, eğer kullanıcı giriş yapmamışsa, bu sayfaya yönlendirilir.

deny users : ‘?’ işaretçisiyle, siteye daha önceden giriş yapmamış kullanıcının (Anonymous User-İsimsiz Kullanıcı) erişim iznine sahip olmadığını belirtiyoruz.


 Kullanıcı erişim izinlerini belirlerken allow, deny sırasını doğru yazmak gerekir. Kod yukarıdan aşağıya doğru çalışacağından, buradaki yapılandırmada yapılacak bir hata, erişim haklarının doğru dağıtılmamasına neden olacaktır.Örneğin önce <allow users="*"> peşinden <deny users="?"> yazmak gereksiz bir iştir,çünkü ilk bildirimde tüm kullanıcılara (bunlara isimsiz kullanıcılar da dahil) erişim hakkı verildiğinden,ikinci bildirim anlamını kaybeder.Fakat önce <deny users="?">,sonra <allow users="*"> bildirimlerini yaparsak,isimsiz kullanıcılar hariç tüm kullanıcılara erişim hakkı tanımış oluruz.
 

4-Daha sonra, Visual Studio araçlarından, Visual Studio 2005 Command Prompt’ u çalıştıralım.

Komut satırına aşağıdaki kodu yazarak, A şirketinin üyelik sistemine ilişkin veritabanını manual olarak yaratalım.

aspnet_regsql –E –S localhost –d dbA –A all
 

Parametrelere de kısaca değinirsek:
 
-E : Sunucuya windows authentication yoluyla bağlanılacağını belirtir.
-S : Veritabanının kurulacağı SQL sunucusunun çalıştığı bilgisayar adını belirtir.
-d : Yaratılacak veritabanının adını belirtir.
-A : Veritabanına hangi özelliklerin dahil edileceğini belirtir. Biz all seçeneğiyle, Membership, Profile, RoleManager, Personalization ve SqlWebEventProvider olmak üzere tüm özellikleri veritabanımıza dahil ediyoruz.


5-Artık veritabanımız hazır olduğuna göre web.config dosyamıza geri dönerek bağlantı ayarlarını yapabiliriz.
 
Bu aşamada, yapacağımız işlemi daha iyi anlayabilmek için, öncelikle machine.config dosyasını açıp, aşağıdaki satırları incelemekte fayda vardır.


 Machine.config,ASP.NET uygulamalarının yapılandırılmasıyla ilgili bilgileri içerir ve “C:\WINDOWS\Microsoft.NET\Framework\[Framework versiyon]\CONFIG” yolu altında yer alır.
Web.config ise machine.config içerisindeki bilgiyi ezerek uygulama, klasör, sayfa bazında yapılandırma yapmamızı sağlar.
 
<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
 

Gördüğünüz üzere, machine.config içerisinde, ”LocalSqlServer” adında bir Sql bağlantısı oluşturulmuş ve connectionString özelliğinde, bağlantının, .\SQLEXPRESS üzerinde çalışan aspnetdb veritabanıyla kurulacağı söylenmiştir.Fakat biz manual olarak yarattığımız veritabanıyla çalışacağımızdan bu bağlantıyı kullanmayacağız.Bu sebeple web.config dosyamızı açıp, aşağıdaki kodu yazalım ve kendi bağlantımızı oluşturalım.


 Machine.config içindeki yapılandırmayı web.config’te ezmek yerine, direkt olarak machine.config içindende değişebiliriz; ancak konfigürasyon orjinalliğini yitirir ve yapılan bir hatanın tüm uygulamaları etkilemesi olasıdır.
 
<connectionStrings>
    <remove name="LocalSqlServer"/>
    <add name="LocalSqlServer" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=dbA" providerName="System.Data.SqlClient" />
</connectionStrings>
 

Burada, machine.config’de tanımlı, varsayılan bağlantıyı kullanmayacağımızı belirtip, bağlantı modelindeki data source ve initial catalog niteliklerini, bir önceki adımda oluşturduğumuz veritabanını göz önünde bulundurarak ayarlıyoruz.


 Tanımladığımız bağlantının da adının “LocalSqlServer” olduğuna dikkatinizi çekerim. Eğer burada farklı bir isimlendirme yaparsak, machine.config içindeki sağlayıcı yapılandırmalarındaki bağlantı adıyla örtüşmeyeceği için sistem çalışmayacaktır. Bu durumda machine.config içerisindeki varsayılan sağlayıcı yapılandırmalarını da web.config’ te ezmek gerekir.
 

6-Bağlantımızı oluşturduktan sonra yapılandırmamızın problem yaratmadan çalışıyor olması gerekir. İsterseniz, devam etmeden önce birkaç kullanıcı yaratmayı deneyelim.
Bunun için, Web Site Administraion Tool’unu (WSAT) kullanacağız.


Ekrana gelen arayüz Security, Application Configuration ve Provider Configuration olmak üzere üç bölümden oluşuyor.

Security : Kullanıcı yaratma,silme gibi işlemlerin yanısıra,rollerini belirleme ve erişimleri düzenleme gibi işlemleri de yapabilmemize imkan sağlar.

Application Configuration : Debug seçeneği,varsayılan hata sayfası,SMTP ayarları gibi uygulama yapılandırmalarını kod tarafında uğraşmadan kolayca yapabildiğimiz kısım.

Provider Configuration : Veritabanına ilişkin sağlayıcı ayarlarını yaptığımız kısım.

Şimdilik bizi ilgilendiren Security kısmı olduğu için bu sekmeye geçelim.

Daha sonra Create User diyerek, yeni kullanıcı yaratma formunu açalım.

Burada kafamıza göre birkaç kullanıcı yarattıktan sonra WSAT’ı kapatalım. Dilerseniz devam etmeden önce kullanıcıların nerede tutulduğunu görmek için, dbA veritabanının içindeki dbo.aspnet_Users tablosunu inceleyebilisiniz.

7-Sistemin nasıl çalıştığını görmek amacıyla, Login kontrolü içeren ikinci bir web formuna ihtiyacımız olacaktır. Bu yüzden projemize sağ tuşla tıklayıp, add new item diyelim ve Login.aspx adıyla, projemize yeni bir web form dahil edelim. Login.aspx sayfasını açıp dizayn kısmına geçelim ve formumuza, toolbox’tan bir adet Login kontrolü sürükleyip bırakalım.


Default.aspx sayfamıza da LoginView ve LoginName kontrollerini ekleyip, aşağıdaki gibi tasarlayalım.

Son olarak projeye sağ tuşla tıklayıp View in Browser seçeneğiyle sitemizi test edelim.



İstediğimiz şeyi A şirketi için kurguladık. Şimdi aynı uygulamayı B şirketi için geliştirirken nelere dikkat etmemiz gerektiği üzerinde duracağız.

B Şirketi Projesi
 
Solution’a sağ tuşla tıklayıp, Add > New WebSite diyerek “B_Sirketi” adında yeni bir proje oluşturalım. İkinci bir üyelik sistemi kurarken ilk yapmamız gereken, aspnet_regsql aracını kullanarak bir veritabanı daha yaratmak olacaktır. Tabi bu sefer veritabanı adını dbB olarak değiştirmeyi unutmamak gerekir. Bu amaçla Visual Studio 2005 Command Prompt’u açıp aşağıdaki kodu çalıştıralım.

aspnet_regsql –E –S localhost –d dbB –A all

İşleri çabuklaştırmak için A_Sirketi uygulamasındaki Default.aspx, Login.aspx ve Web.config dosyalarını kopyalayıp, B_Sirketi web site projesi içerisine yapıştıralım.

Son olarak da B_Sirketi içine kopyaladığımız web.config’te, bağlantının initial catalog niteliğine dbB değerini atayalım.

<connectionStrings>
    <remove name="LocalSqlServer"/>
    <add name="LocalSqlServer" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=dbB" providerName="System.Data.SqlClient" />
</connectionStrings>
 

Bu kısmı da hallettikten sonra geriye sadece projeyi test etmek kalıyor. Web Site Administraion Tool’ unu açıp B_Sirketi için de birkaç kullanıcı oluşturalım. Oluşturduğumuz kullanıcalar dbB veritabanındaki dbo.aspnet_Users tablosunda aşağıdaki gibi yer alacaktır.



Artık her iki uygulamayı da çalıştırıp yarattığınız kullanıcılarla giriş yapmayı deneyebilirsiniz. Gördüğünüz gibi artık birbirinden bağımsız çalışan iki ayrı üyelik sistemimiz var. Her iki sistem içinde de farklı kullanıcılar yaratıp, bunların erişim haklarını, rollerini belirlememiz mümkündür. Ayrıca hem SQLEXPRESS çatısından kurtulduk, hem de veritabanının App_Data içinde yaratılmasının önüne geçtik. Şimdi, bu ana kadar yaptıklarımıza kısaca göz atarsak:

A ve B şirketleri için iki ayrı web uygulaması oluşturduk.

Örneğimizdeki şirketlerin üyelik sistemlerine ait veritabanlarını aspnet_regsql aracını kullanarak oluşturduk.

Machine.config içindeki yapılandırmayı, web.config içerisinde ezerek veritabanı bağlantısını şekillendirdik.

Web Site Administraion Tool’ u aracılığıyla kullanıcı hesaplarını yarattık.

Login kontrollerini kullanarak projelerimizi test ettik.

Bir dahaki makalede görüşmek üzere,hoşçakalın…
 
Cenk Özdemir
cenkozdemir@gmail.com


Cenk Özdemir

Programcılığa C programlama dili ile başlayan Cenk ÖZDEMİR, Visual Basic, PHP, Java gibi farklı diller ile de uygulamalar geliştirmiştir. Uzun süredir .NET Platformunda çalışmalarını sürdüren ÖZDEMİR, özellikle C# programlama dili, Object Oriented Programlama ve .NET Framework mimarisi üzerinde uzmanlaşmıştır.  Kendi geliştirdiği eğitim içeriğiyle Türkiye'nin önde gelen kurumlarından birinde yazılım eğitimleri vermekte olup, çalışmalarına tüm hızıyla devam etmektedir.

Blog: http://www.cenkozdemir.com
Bu makaleye ilk yorum yapan siz olun.

Yorumunuz