SQL Server – Management Studio üzerindeki Veritabanı Listesinin Düzenlenmesi

Merhaba,
SQL Server’da bir kullanıcı oluşturdunuz. Bu Kullanıcı ise Server’da ki bazı veritabanlarında yetkili bazılarında ise yetkisi bulunmuyor.
Kullanıcı SQL Server Management Studio’dan Login olduğunda yetkisi olmayan veritabanlarınıda görüntülüyor olacaklar. Peki bunları düzenleyip sadece yetkisi olduğu veritabanlarının gösterilmesini nasıl sağlayabiliriz ?
Örnek ile detaylandıracak olursak ;
Hosting Firması işletiyorsunuz ve Müşterilerinize SQL Server Database tanımlamaları için yetki veriyorsunuz.  Aynı zamanda farklı bir müşterinizde aynı servera kullanıyorlar ve onlarında sizlerin izin verdiği yetkiler dahilinde veritabanı oluşturabiliyorlar ve birbirlerinin oluşturdukları veritabanlarını görüntüleyebiliyorlar.
Peki Neden SQL Server da login olabilen bütün kullanıcılar object explorer üzerinde bütün databaseleri görüntülerler ?
Cevabı aslında basit ;
SQL Server her kullanıcımızın üye olduğu public adında bir rol vardır ve varsayılan olarak bu role VIEW ANY DATABASE yetkisi verilmiştir. Yani bu role sahip her kullanıcı yetkisi olmasa bile erişim hakkı olmaz ama tüm veritabanlarının listesini Object Explorer penceresinde görebilmektedir. Bu nedenle eğer tüm kullanıcılardan veritabanı listesinin gizlemek istiyorsak public rolünden bu yetkiyi almamız gerekmektedir. Aynı şekilde sadece bir kullanıcıdan da bu yetkiyi alarak sadece bir kullanıcının tüm veritabanları görmesini engelleyebiliriz.
Örnek Uygulama ; 
1
2
3
4
5
-- testYetki isimli bir login oluşturuyoruz. UserName : testYetki Password : testYetki
USE [master]
GO
CREATE LOGIN [testYetki] WITH PASSWORD=N'testYetki', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
Oluşturduğumuz Login nesnesi SQL Server’a login olduğunda Object Explorer’da tüm DB’lerin listesini görüntüleyebilecektir.
TestYetki
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- Aşağıdaki Sorgu ile test isimli DB üzerinde okuma yetkisi tanımlıyoruz.
USE [test]
GO
CREATE USER testYetki FOR LOGIN [testYetki]
GO
ALTER ROLE [db_datareader] ADD MEMBER testYetki
GO
-- Oluşturduğumuz login nesnesinin tüm yetkilerini aldık.
USE [master]
GO
DENY VIEW ANY DATABASE to [testYetki]
--Şimdi ise oluşturduğumuz Login Nesnesinin belirtilen görüntüleyeceği DB'yi belirtiyoruz.
USE [test]
GO
DROP USER testYetki
GO
EXEC dbo.sp_changedbowner @loginame = N'testYetki', @map = false
GO
TestYetki2
işlem tamamdır   Artık User Sadece Kendisinin yetkisi olduğu DB’leri görüntülüyor.

Yorumlar

Bu blogdaki popüler yayınlar

TERMINAL SERVICES UNLIMITED

Uzak Masaüstü Bağlantı Geçmişini Silmek

Putty Komut dizini