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

By | 22 Kasım 2013

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 ; 

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

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

Share

5 thoughts on “SQL Server – Management Studio üzerindeki Veritabanı Listesinin Düzenlenmesi

  1. Ali

    Windows authentication modda hâlâ tüm veritabanları gözüküyor. .

    Reply
    1. cozenc Post author

      hangi kullanıcı için deny işlemi yaptıysanız o kullanıcıda işlem geçerli olur.

      Reply
  2. SALIH YUCEL

    bir database’in bir den falza owner’i olabilir mi hocam?
    db_owner yetkisi dışında.

    yani bu işlemi sadece bir kullanıcı için yapabiliyorum.
    aynı anda bir database üzerinde iki farklı kullanıcı çalışmak isterse bu yöntemle sadece biri erişebilmekte.

    yardımcı olabilir misiniz?

    Reply
    1. Çağlar Özenç Post author

      Merhaba Salih,
      Windows Authentication olarak erişen kullanıcılar ise bir Windows Group tanımlaması yapıp bu kullanıcı database owner seçebilirsin.

      Reply

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir