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
[email protected]
Makale:
Sql Sunucusunda Birden Fazla Üyelik Sistemi Barındırma ASP.NET Cenk Özdemir
|