Loginlerin, instace üzerindeki yetkili olmadığı veritabanı isimlerini görmesini engellemek

23 Eyl by NURULLAH ÇAKIR

Loginlerin, instace üzerindeki yetkili olmadığı veritabanı isimlerini görmesini engellemek

Konsolide bir SQL Server ortamı kullanıyorsanız bir instance üzerinde birden fazla uygulamaya ait veritabanı ve login var demektir. Her login instance’a bağlandığında default olarak diğer veritabanlarını görür fakat yetki vermediyseniz veritabanının içindeki hiçbir şeyi görüntüleyemez. Login’lerin kendilerine ait olmayan veritabanlarının isimlerini görmeside bir güvenlik açığıdır. Bu yüzden loginlerden başkalarının veritabanlarının isimlerini görebilme yetkisini almanız gerekir.

 

Örneğin DenyLogin isminde bir Login oluşturalım ve AdventureWorks2014 veritabanı üzerinde bu Login’e db_datareader yetkisi verelim. “Login oluşturmak ve yetkilendirmek” isimli makalemizde bu işlemi nasıl yapacağınızın detaylarını bulabilirsiniz. SSMS kullanarak instance’ımıza DenyLogin ile bağlanalım. Yetkimiz olmayan diğer veritabanlarının da Instance’ın altında göründüğünü farkedeceksiniz. Fakat veritabanlarının yanındaki + işaretine tıkladığınızda size aşağıdaki gibi bir hata verecektir. The database Test is not accessible.

 

 

Aşağıdaki komutu yetkili başka bir kullanıcı ile çalıştırın.

USE master;
GO
DENY VIEW ANY DATABASE TO [DenyLogin];
GO

Daha sonra DenyLogin’iniz ile bağlı olduğunuz kısma gelip Databases sekmesini sağ tıklayıp refresh ettiğinizde bu sefer de hiç veritabanı gözükmediğini farkedeceksiniz. Çünkü DenyLogin’e sadece read yetkisi verdik. DenyLogin’e aşağıdaki script ile sahibi olduğu veritabanında owner’lık yetkisi vermeniz gerekecektir.

USE master;
GO
ALTER AUTHORIZATION ON DATABASE::AdventureWorks2014 TO [DenyLogin];
GO

Loginlere veritabanlarında owner’lık vermek bazen istenmeyen bir durum olabilir. Aşağıdaki makale ile veritabanına owner’lık vermeden de bu işlemi gerçekleştirebilirsiniz.

Contained Database Nedir

Yukarıdaki script’i çalıştırmaya çalıştığınızda da aşağıdaki gibi bir hata ile karşılaşacaksınız. Eğer daha önce login’i veritabanında yetkilendirme işlemi yapmadıysanız bu hata karşınıza çıkmayacaktır.

Bu hatanın açıklaması da şu: AdventureWorks2014 veritabanında DenyLogin isimli Login’i owner olarak set etmek istediniz. Fakat Veritabanında şu anda DenyLogin isimli bir User ya da alias mevcut. Sebebi ise daha önce bu login’i read yetkisi ile veritabanına map etmemizdir. Map işlemini yaptığımızda SQL Server AdventureWorks2014 veritabanında DenyLogin’e ait DenyLogin isminde bir User oluşturdu. Bu sorunu aşmak için aşağıdaki script yardımıyla veritabanı içindeki DenyLogin user’ını silebilirsiniz. Silme işleminden sonra yeniden yukarıdaki ALTER AUTHO.. İle başlayan script’i çalıştırdığınızda bu sefer işlem doğru bir şekilde sonuçlanacaktır ve DenyUser ile açmış olduğunuz bağlantıya gelip Databases sekmesini tekrar refresh ettiğinizde AdventureWorks isimli veritabanını görebileceksiniz.

USE AdventureWorks2014
GO
DROP User DenyLogin

Bu işlemi çalışan bir sistemde yaparsanız kısa süreli de olsa bir kesinti olacaktır.

 

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir