22 Mart 2011 Salı

SQL Server'da Yetkilendirme:Grant,Deny,Revoke

Merhaba arkadaşlar,

Bugün sizlerle SQL Server'da yetkilendirme konusuna değineceğiz. Konu içerisinde kullanmak üzere bir login ve user tanımlayarak giriş yapalım.

create login gurkan with password='forzabesiktas'

komutuyla forzabesiktas şifresine sahip, gurkan adında bir kullanıcı oluşturmuş olduk. Şimdi bu login üzerinden bir kullanıcı yaratalım ve asıl konumuza başlayalım:

create user gurkan for login gurkan

User oluşturmuş olduk (Login ile user name aynı isimde.)

GRANT: Yetki vermek için kullanılır.
Genel yapısı şöyledir:
grant (all | izinler)
on (izneTabiTutulanlar)
to (izinVerilenler)

Hemen yaratığımız kullanıcı üzerinden örnekleyelim:
grant create table to gurkan --bu ifade ile gurkan adli kullaniciya tablo yaratma yetkisi vermis olduk

İsterseniz aynı kullanıcımıza tabloya eleman ekleme, silme ve güncelleme yetkileri verelim:
grant insert,update,delete to gurkan

Şimdi isterseniz herhangi bir tablo üzerinden select çekebilme yetkisi verelim. Ben Northwind kullandım, siz istediğiniz db ve tabloyu kullanabilirsiniz.
grant select on region to gurkan--bu ifade ile gurkan adli kullanici, region tablosundan select cekebilir.

WITH GRANT OPTION: Dereceli yetkilendirme işleminde kullanılır. Nedir bu peki? İzin verdiğiniz kullanıcının da izin verebilme yetisi kazanmasıdır. Yani siz bir kullanıcıya herhangi bir yetki verdiniz. O kullanıcı da, sizin ona verdiğiniz yetkilerin aynısını, başka bir kullanıcıya verebilir.

grant select,insert on region to gurkan
with grant option

ifadesi ile biz, gurkan adlı kullanıcıya region tablosu üzerinde select ve insert hakkı veriyoruz. Ama with grant option ifadesinden ötürü, gurkan kullanıcısı da, başkasına da bu hakkı verebilir. Fazla zaten veremez, kendisi ne kadar hak aldıysa, o kadar..

DENY: Grant ifadesinin tam tersidir. Yetkileri engeller; eriştirmez.Genel yapısı şöyledir:
deny (all | izinler)
to (izinVerilenler)

deny create table to gurkan--bu ifade ile gurkan kullanicisina tablo yaratmayi yasakladik

deny insert,select on products to gurkan--bu ifade ile gurkan kullanicisinin products tablosuna insert ve select yapmasini engelledik

REVOKE: Grant ile oynadığınız hakları eski haline döndürmek için kullanabilirsiniz bu ifadeyi. Genel yapısı şöyledir:
revoke (all | izinler)
to/from (izinVerilenler)

revoke all on region to gurkan--bu ifade ile gurkan kullanicisina verilen tum yetkiler kaldirilir

Deny neden var peki diyeceksiniz.. Şöyle anlatmaya çalışayım, deny ile bir kullanıcı hiçbir şekilde yasakladığınız şeyleri yapamaz. Ancak revoke dediğinizde, siz sadece yaptığınız işi geri almış oluyorsunuz ve sadece mevcut rol üzerinde işlem yapıyorsunuz. Aynı kullanıcı farklı rollerde bu işi yapmayı sürdürebilir.

Yukarıda hatırlarsanız with grant option ile yetki verdiğimiz kullanıcılar da aynı yetkileri başka kullanıcılara verebiliyordu. Şimdi biz az önceki revoke örneğimizde, gurkan adli kullanicinin yetkisini kaldirdik. Peki onun yetkilendirdikleri ne olacak? Tam da bu noktada "Cascade" ifadesi devreye giriyor. Cascade ile bu da kaldırılır. Örnekleyelim hemen:
revoke all to gurkan cascade--bu ifade ile gurkan kullanicisinin yetkilendirdigi diger kullanicilarin da yetkilerini kaldirmis olduk

Görüşmek üzere..

5 yorum:

minikkus dedi ki...

Selam Gürkan Bey,
Junior DBA olarak yapmamın istendigi bir task var. Nette cok arastırdım fakat detaylı bilgiye rastlayamadım. Çok acil bu işi yetiştirmem gerekiyor:( Belki bana yardımcı olabilirsiniz diye düşündüm..

Birkac veritabanından oluşan bir SQL instance var.
- Bu instance üzerinde bir kullanıcı yaratılacak (sistemdeki windows kullanıcısı icin sql icerisinde login yaratılacak, böylece windows authentication ile direk giris yapabilecek)
- bu kullanıcı, tüm dbler üzerinde bulunan tüm tablolar ve viewlere select, insert, update yapabilecek.
- dbler üzerinde hicbir sekilde delete yapamayacak. tüm delete yetkileri ve db_owner yetkileri elinden alınacak.
- sp_execute yapabilecek.
Bu yetkilendirme işlemi, çoklu kullanıcılı sistemlerdeki guvenlik problemini en aza indirmek icin isteniyor.
Bu konuda bana yardımcı olabilir misiniz?
Cevabınız icin şimdiden cok tesekkur ederim.

Unknown dedi ki...

Gayet açıklayıcı olmuş , teşekkürler.

Gürkan Alkan dedi ki...

Merhaba,
Umarım halletmişsinizdir, 3 senedir bloga giremiyordum. Yine de benzer sorununuz varsa, tekrar iletebilirsiniz.

Adsız dedi ki...

harika bir anlatim teşekkurler...

Adsız dedi ki...

harika bir anlatim olmuş teşekkurler