SQL Server üzerinde bazı durumlarda bir kullanıcıya sadece veritabanı içindeki tabloların, view’lerin ve kolon adlarının görünmesini isteyebiliriz. Bu, özellikle sadece schema seviyesinde analiz yapacak, ama verilere erişmemesi gereken kullanıcılar için sıkça tercih edilen bir güvenlik modelidir.
Bu makalemde, K1 adında oluşturduğum bir SQL Server Authentication kullanıcısına, yalnızca belirli bir veritabanında tablo, view ve kolon adlarını görme izni vermeyi amaçladım. SQL Server Management Studio (SSMS) üzerinden Bir kullanıcı oluşturuyorum. Önceden kurulumuş olan bir kullanıcıda olabilir.
Yapacağımız işlem K1 kullanıcısı, bir veritabanındaki tablo ve view isimlerini göstersin; ama verinin içeriğine erişemesin.
İlk olarak SSMS üzerinden K1 adında bir SQL Authentication kullanıcısı oluşturdum:
CREATE LOGIN K1 WITH PASSWORD = '1';
Daha sonra bu kullanıcıyı hedef veritabanına kullanıcı olarak ekledim. Hedef veritabanında sadece public yetkisine sahip olacak şekilde
USE [AdventureWorks2015]
GO
CREATE USER [K1] FOR LOGIN [K1]
GO

Kullanıcının sadece tablo ve view yapısını görmesi için AdventureWorks2015 veritabanı altında bulunan security kısmında K1 user seçilip VIEW DEFINITION yetkisi verildi.

K1 userına girildikten sonra Securables kısmında Search butonuna tıkladıktan sonra gelen ekranda Specific Object.. bölümü seçilip OK butonuna tıklanır.

Gelen ekranda Objects Types.. kısmından Databases seçilip daha sonra Browse.. bölümünden public yetkisi verilen veritabanı tabanı seçimi yapılır.

OK butonuna tıkladıktan sonra gelen ekranda ilgili veritabanına VIEW DEFINITION yetkisi verilmektedir.

Bu yetki sayesinde K1 kullanıcısı, veritabanındaki tüm tablo ve view’ların adlarını ve kolon adlarını görebiliyor. Ancak verinin içeriğine erişemez.

Herhangi bir tabloya select çektiğimizde hata mesajıyla karşılaşırız.

İsteğe göre, yetkiyi sadece belirli bir tabloya ya da view’a da verebiliriz:


use [AdventureWorks2015]
GO
GRANT VIEW DEFINITION ON [Person].[Person] TO [K1]
GO

Bu yöntemi, özellikle dış denetçiler, veri sözlüğü hazırlayan ekipler veya analiz için sadece şema düzeyinde erişim isteyen kullanıcılar için güvenle uygulayabiliriz. VIEW DEFINITION yetkisi sayesinde veri güvenliği korunurken, yapısal bilgi sağlanmış olur.
Başka bir SQL Server makalesinde görüşmek dileğiyle.
“Onlar, namazı dosdoğru kılarlar ve kendilerine rızık olarak verdiklerimizden infak ederler.” Enfal Suresi, 3. Ayet