SQL Server 2005'te veritabanı gizleme

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.
Comments

Comments (5) -

Selim
Öncelikle yazı için teşekkür ederim.

Gizlenmiş veritabanını tekrar görünür hale nasıl getirebiliriz.
Muammer Benzeş
Merhaba Selim,
Aşağıdaki komutlar ile tekrar görünür hale getirilebilir :

USE master
GO
GRANT VIEW any DATABASE TO public
Selim
Teşekkürler
umut tuzkaya
Tam olarak aradığım şeyi yazmışsın. Teşekkür ederim.
Konuyla alakalı başka bir sorum olacak.
Bir kullanıcının kendi şifresini değiştirmesini engellemek istiyorum, nasıl yapılabileceği hakkında bilgin var mı? Teşekkürler.
MuammerBenzes
Merhaba Umut,
SQL Server kullanıcısı için bildiğim bir yöntem yok. Windows kullanıcısını SQL Server üzerinde yetkilendirip, Windows'ta şifresini değiştirmesini engellemek çözüm olabilir sanırım.