Microsoft SQL Server’da roller (roles), kullanıcıların belirli izinlere sahip olmasını sağlayan mantıksal gruplardır. SQL Server’da üç ana rol türü bulunur. Şimdi sırasıyla bu rollere değinelim.
Veritabanı Rolleri (Database Roles)
Bir veritabanında kullanıcıları gruplandırarak onlara belirli yetkiler vermek için kullanılan rollerdir.
Gerçek sistemlerde veritabanı kullanıcılarına database bazında bazı izinler verilir bu izinler genellikle db_datareader,db_datawriter,db_ddladmin yetkileridir. Bunun için tüm user’lara teker teker bu roller tanımlanacağına user mapping kısmından yeni bir role oluşturarak yanlış bir yetki vermenin önüne geçmiş oluruz.

Veritabanı bazında herhangi bir rol tanımlamak için kullanıcının db_securityadmin, db_owner yetkisine veya create role yetkisine sahip olması gerekmektedir.

LOGIN1 kullanıcısına ilgili yetkileri tanımladıktan sonra şimdi LOGIN1 kullanıcısıyla login olalım ve database bazında role oluşturma işlemlerimize geçelim.

New database Role… sekmesine tıkladıktan sonra role’ün ismini sahibini ve hangi database rolünü kullanacaksak onu seçmemiz lazım ben yukarıda belirttiğim gibi ddladmin datareader datawriter seçiyorum. Şunu belirtmek gerekir owner kısmına tanımlanmış olan kullanıcı silinmek istendiğinde bu role ün kullanıcısı değiştirilmeden yani LOGIN1 silinmeden silinmez.

Role’le ilgili database altında gerekli veritabanı role’leri verdikten sonra securables kısmından yada bu bölümden yapmayıp ilgili veritabanı properties kısmında bulunan permission>search kısmından belirlemiş olduğumuz role’ü seçip bazı yetkileri kısıtlayabiliriz.

Bundan sonra hangi nesneler üzerinde işlem yapmak istiyorsak onu seçiyoruz.

Database nesnesini seçip bu role ün hangi database üzerinde yetkisini olmak istiyorsak onu seçiyoruz.

Database ile ilgili kısıtlama yapabiliriz. İlgili role’ün hangi veritabanı üzerinde ne gibi kısıtlamaları olması gerektiğini belirleyebiliriz.

Burada bu role insert yetkisi vermedim aslında rolümü daha spesifik bir değerler set ettim. İlgili tablomuzda kısıtlama yapabiliriz bunun için tablomuza select çektiğimizde kolun bazlı kısıtlama veya başka bir şey yapabiliriz.

Kolun kısıtlamasından tarih kolonunun gözükmemesini sağlayacağız.

Şimdi role tanımlanan database altında bir user oluşturalım.


Şimdi bu user ile bağlandıktan sonra select çekelim tarih kolonumuza izin vermemiştik deny demiştik.


Manuel role oluştururken herhangi bir insert yapmasın demiştik bakalım insert işlemi yapabiliyormuyuz.

Güncelleme yapabileceğini belirtmiştik.

New database securables kısmından yapabileceğimiz gibi role oluşturduktan sonra veritabanı sağ tıklayıp properties kısmından permissions sekmesinden search kısmından ilgili database role’ü seçebiliriz.

Yukarıda veritabanı bazlı role tanımladıktan sonra şimdi ise server seviyesinde role tanımlamak olmalı bununda database role’de olduğu gibi yetkilerin çok kapsamlı gelmesi bu kapsamlı gelen rolleri minimize edebiliriz.
Veritabanı Rolü Oluşturma:
USE VeritabaniAdi;
CREATE ROLE VeriRoleAdi;
GRANT SELECT, INSERT, UPDATE ON TabloAdi TO VeriRoleAdi;
Sunucu Rolleri (Server Roles)
SQL Server genelinde yönetimsel yetkilere sahip kullanıcıları belirlemek için kullanılan roller. SQL Server seviyesinde güvenlik yönetimi, oturum açma izinleri, veritabanı oluşturma ve sunucu düzeyindeki işlemler için kullanılır.
S1\TEST instance altında Security bölümünde New Server Role.. kısmında adımlarıma başlıyorum.

Oluşturacağımız role yapısına hangi kullanıcılarımın üye olması gerektiğini seçiyorum.



Normalde login’lerin server role’ü public. public rolü, tüm loginlerin temel seviyede sunucuya erişebilmesini sağlamak için varsayılan olarak atanır. public rolünün üyeliği değiştirilemez, yani bir kullanıcı bu rolden çıkarılamaz.


Login1 kullanıcısına role’ün eklendiğini görmüş olduk

LOGIN1 kullanıcısına yukarıda tanımlanan role aracılığıyla veritabanı oluşturma yetkisi verdikten sonra veritabanı oluşturmuş oldum.

Sunucu Rolü Oluşturma
CREATE SERVER ROLE SunucuRoleAdi;
ALTER SERVER ROLE SunucuRoleAdi ADD MEMBER KullaniciAdi;
Uygulama Rolleri (Application Roles)
Bir uygulamanın, kullanıcı bazlı kimlik doğrulama yerine kendine özgü izinlerle veritabanına erişmesini sağlamak için kullanılan roller. Application role veritabanı seviyesinde tanımlanan bir role’dür database bazlı çalışır.
Application Rolleri kullanarak bir veritabanına sadece belirli bir uygulamadan belirli kullanıcılarla erişmek için kullanabilirsiniz.


USE [PARTITIONTEST]
GO
CREATE APPLICATION ROLE [TEST23] WITH DEFAULT_SCHEMA = [dbo], PASSWORD = N'1'
GO
USE [PARTITIONTEST]
GO
ALTER AUTHORIZATION ON SCHEMA::[db_datareader] TO [TEST23]
GO
Application Role’lerin database rolleri gibi üyeleri olmaz. Uygulama üzerinden sp_setapprole stored procedure’ü ile aşağıdaki gibi aktif edilebilirler.
EXEC sp_setapprole 'TEST23', '1';
Application Role’lerin en önemli özelliği herhangi bir login’e bağlı olmadıkları için veritabanının başka bir instance’a taşınma işlemi daha kolay olacaktır.
SQL Server 2005 ile beraber Application Role’lerin yerine SQL User Without Login kavramı geldi.
User’ların kendi şifresini değiştirme yetkisi veriyoruz.
Başka bir makalede görüşmek dileğiyle..
“Onlara, “Allah’ın indirdiğine uyun” denildiğinde, “Hayır, biz atalarımızdan gördüğümüze uyarız” dediler. Peki ama ya şeytan onları alevli ateşin azabına çağırıyorsa!”Lokman-21