Bir veritabanına yetkili bir user’a database sekmesi altında bulunan Security>Users kısmında ilgili kullanıcıya Owned Schemas bölümünden sema bazlı yetkiler verilebilir. İlgili kullanıcıya yetki verme işlemini yetkili bir kullanıcı ile gerçekleştirmekteyim.
Kullanıcımızın veritabanı üzerinde sadece public yetkisi bulunmaktadır. Kısacası hiç bir işlem yapamaz.

İlgili kullanıcının properties ekranında bağlantı sağlandıktan sonra Owned Schemas kısmına girilir.

İlgili kullanıcının hangi schema üzerinde yetkili olmasını istiyorsak ilgili schema yapısı seçilmektedir.

İlgili işlemin scripti:
USE [AdventureWorks2017]
GO
ALTER AUTHORIZATION ON SCHEMA::[HumanResources] TO [klnUser01]
GO
Yukarıdaki yetkiden sonra veritabanı altında bulunan ilgili schemanın sahibi belirtilen kullanıcı olmaktadır.

İlgili kullanıcı ile sql server’a bağlantı sağlandığında artık bağlantı sağlanan kullanıcı sadece HumanResources tablosunu görmektedir. Bu tablolar üzerinde rahatlıkla select sorgusu çekebilir. Ayrıca ilgili schema yapısının sahibi olduğu için güncelleme ve silme işlemleri de yapılabilir.

İlgili kullanıcı ile tablo silme işlemi başarılı bir şekilde gerçekleştirmiş oldum.

Diğer schema yapılarının ne olduğuna değinecek olursak:

SQL Server’da hem db_datareader isimli bir rol vardır hem de aynı isimde bir şema vardır.
- Membership sekmesinde db_datareader seçersen: Kullanıcı veritabanındaki tüm şemalardaki tabloları okuyabilir.
- Owned Schemas sekmesinde db_datareader seçersen: Kullanıcı sadece ismi db_datareader olan şemanın sahibi olur. Bu şema genellikle boştur ve kullanıcıya veritabanı genelinde bir okuma yetkisi vermez.
Yukarıdaki resimde db_owner şemasını işaretlenmiş. Bu, kullanıcının db_owner isimli şemanın sahibi olduğu anlamına gelir. Ancak asıl yetkiyi kullanıcıyı Membership sekmesinden db_owner rolüne üye yaparak verirsin. Şema sahipliği vermek, veritabanı yöneticisi (admin) yetkisi kazandırmaz.
Özetle
| İşlem | Yetki Kapsamı | Sonuç |
| Owned Schemas: HumanResources | Sadece HumanResources şeması | O şemadaki her şeyi yapar (CRUD + Drop). |
| Membership: db_datareader | Tüm veritabanı | Tüm şemalardaki tabloları sadece okur. |
| Membership: db_owner | Tüm veritabanı | Veritabanında her türlü işlemi yapar (Admin). |
Bu makalede veritabanı üzerinde Owned Schemas yapısını detaylı bir şekilde görmüş olduk. Başka makalede görüşmek üzere..
“Biz ona şah damarından daha yakınız.” Kaf-16
