SQL Server 2005 kurduğumuz sunucu üzerinde kullanım amacına göre zaman zaman birden çok veritabanı yeralabilmektedir. Bu veritabanları aynı iş ile ilgili olup aynı kişiler tarafından kullanılmakla beraber özellikle hosting şirketlerinde olduğu gibi tamamen ilgisiz ve farklı kişilere ait olabilmektedir. Böyle durumlarda SQL Server üzerinde yeralan veritabanlarının hem uzun olduğu için kullanıcı kendi veritabanını bulmakta zorlanabilmekte hem de tüm veritabanlarının isimleri tüm kullanıcılar tarafından görülebilmektedir. Tüm bunlardan kurtulmak ve kullanıcıya SQL Server üzerinde yeralan tüm veritabanlarını göstermeden sadece kendisine ait veritaban(lar)ını göstermek mümkün müdür? Evet, mümkün :)
SQL Server 2005 kurulduğunda varsayılan olarak sunucu üzerinde yeralan tüm veritabanları listesi görüntülenebilir haldedir. (Şekil 1) Bunu sağlayan "public" isimli sunucu rolünün tüm veritabanlarını görme izninin olması ve bu rolün tüm kullanıcılara eklenmesidir.
Şekil 1. SQL Server Management Studio ile veritabanının bulunduğu sunucuya bağlanan kullanıcı sunucu üzerindeki tüm veritabanlarının listesini görebilir.
Kullanıcıların tüm veritabanlarını görmesi yukarıda da bahsettiğimiz gibi hem kendi veritabanlarını listeden bulmakta zorlanmalarına ve meraklı kullanıcıların meraklarının artmasına ve gereksiz bazı çabalar içine girmelerine sebep olabilmektedir. Bunları engellemek ve kullanıcının sadece kendisine ait veritaban(lar)ını görmesini sağlamak için aşağıdaki adımları uygulamamız gerekiyor :
1. SQL Server Management Studio'da File menüsünden New başlığı altındaki Query with Current Connection linkine veya sol üstteki New Query linkine tıklayarak yeni bir sorgu penceresi açıyoruz.
2. Sorgu penceresinde aşağıdaki komutları çalıştırarak public rolü için tüm veritabanlarını görüntüleme iznini kaldırıyoruz :
USE master
GO
DENY VIEW any DATABASE TO public
3. Yine sorgu penceresinde her bir veritabanı için dbo rolünü ilgili kullanıcı olarak değiştiriyoruz :
USE veritabani_adi
GO
EXEC sp_changedbowner kullanici_adi
veritabani_adi yerine ilgili veritabanının adını, kullanici_adi yerine de o veritabanının kullanıcısının adını yazıyoruz.
İşlemler tamamlandığında, kullanıcı SQL Server Management Studio ile sunucuya bağlandığında Şekil 2'de gibi sadece kendisine ait veritaban(lar)ını görebilmektedir.
Şekil 2. Kullanıcı artık sadece kendisine ait veritaban(lar)ını görebiliyor
Not : Bu şekilde veritabanını sadece bir kullanıcı görebilmektedir. Birden fazla kullanıcısı olan veritabanlarında sadece dbo rolüne atanmış kullanıcı veritabanını görebilmektedir, diğer kullanıcılar SQL Server Management Studio ile bağlanamamakta ve veritabanını görememektedir.
SQL Server 2008'de bu işlem nasıl yapılıyor? Daha kolay bir yolu var mı? Başka bir yazıda bu soruların cevaplarını vermeye çalışacağım.