| 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.
 
 
 
			A Şirketi Projesi
				|  | 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. |  
 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.
 
 
			4-Daha sonra, Visual Studio 
		araçlarından, Visual Studio 2005 Command Prompt’ u çalıştıralım.
				|  | 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. |  
 
  
 Komut satırına aşağıdaki 
kodu yazarak, A şirketinin üyelik sistemine ilişkin veritabanını manual olarak 
yaratalım.
 
 
 
	Parametrelere de kısaca 
değinirsek:
		| aspnet_regsql –E –S localhost –d dbA –A all |  
 -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.
 |  
			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.
				| <connectionStrings> <add name="LocalSqlServer" connectionString="data 
				source=.\SQLEXPRESS;Integrated 
				Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User 
				Instance=true" providerName="System.Data.SqlClient" />
 </connectionStrings>
 |  
 
 
			
				|  | 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. |  
			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.
				| <connectionStrings> <remove name="LocalSqlServer"/>
 <add name="LocalSqlServer" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=dbA" 
				providerName="System.Data.SqlClient" />
 </connectionStrings>
 |  
 
 
			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.
				|  | 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. |  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.
 
 
 
	Şimdilik bizi ilgilendiren Security kısmı olduğu için bu sekmeye geçelim.
	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.
 
 
 
  
 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.
 
 
 
	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.
		| <connectionStrings> <remove name="LocalSqlServer"/>
 <add name="LocalSqlServer" connectionString="data 
		source=localhost;Integrated Security=SSPI;Initial Catalog=dbB" 
		providerName="System.Data.SqlClient" />
 </connectionStrings>
 |  
 
  
 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:
 
 
 
	Bir dahaki makalede görüşmek üzere,hoşçakalın…
	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.
 
 
 Cenk Özdemir
 [email protected]
 
 
 
                Makale:Sql Sunucusunda Birden Fazla Üyelik Sistemi Barındırma ASP.NET Cenk Özdemir
 |