SQL Server DCL Komutları
Merhabalar,
Veri tabanı üzerinde yaptığımız işlemlerde kişisel verilerle ,uygulamamız ya da sitemizle ilgili güvenlik bakımından önemli verilerle karşılaşmaktayız. Bu bilgilerin önemi bir hiyerarşi yapısı içinde sıralanabilir.
Satış tutarlarının , personel ve müşteri bilgilerinin görüntülenmesini istemiyor ya da herhangi bir tablomuza erişilmesini veya değiştirilmesini istemiyor olabiliriz. Bu gibi durumlar veritabanı yönetiminde güvenlik bakımından büyük önem taşımaktadır.
Peki biz bunları nasıl yapacağız ?
SQL Server , bize veri tabanı yönetiminde güvenlik alanında bir yetkilendirme hakkı vermektedir. Bunu da DCL komutları üzerinden yapmaktayız.
Data Control Language (Veri Kontrol Dili) kısaca DCL , veri tabanı üzerinde işlem yapan ya da yapmasını istediğimiz kullanıcılara veri tabanına erişim , yetkilerin verilmesi ya da daha öncesinde verilmiş olan bu yetkilerin alınması veya yeniden düzenlenmesi ile ilgili işlemlerin gerçekleştirilebileceği komutları içeren bir dildir.
Nedir bu yetkiler ?
Önceliğimiz tabi ki veri tabanına erişim. Daha sonrasında ise, tablo oluşturmak ,veri eklemek ,silmek ,güncellemek gibi birçok yetkilendirme yapabiliriz.
Yetkiyi Nasıl Vereceğiz ?
Yetki verebilmek için yetkiye sahip olmak birinci dikkat edilecek kriterimizdir. Zira hiyerarşi yapısını düşündüğümüzde alt yetkiyi verebilmek için üst yetkiye sahip olmamız gerekir.
SQL üzerinde default olarak gelen yetki verebilecek kullanıcılarımız ; sysadmin , dbcreator , db_owner , db_securityadmin ‘dir.
GO 😊
GRANT Kullanımı
SQL Server üzerinde yetki verebilmek için kullanılan komuttur.
Örnekler üzerinde yetkilerimizi vererek başlayalım.
Not : Örnekler AdventureWorks veri tabanı üzerinden yapılacaktır.
Yazımızda bahsettiğimiz gibi önceliğimiz login olmaktır. Bunun için birlikte bir login oluşturalım.
[php] CREATE LOGIN cagdas WITH PASSWORD = ‘123456Pass’ [/php]
Kullanıcımızı oluşturduk. Oluşturduğunuz login tanımlamasına Securityà Logins altından bakabilirsiniz. Şimdi bu login üzerinden yetki vermek için kullanacağımız kullanıcıyı oluşturalım.
[php]CREATE USER cagdas FOR LOGIN cagdas [/php]
Kullanıcımızı da tanımlamış olduk. Bu kullanıcımıza yetkiler vererek devam edelim.
Genel kullanımı ,
[php] GRANT izinler ON izin_verilecek_yapi TO izin_verilecek_kisi [/php]
Kullanıcımız veri tabanına login olabiliyor ancak herhangi bir tabloyu göremiyor. Bu kullanıcımıza Adres tablomuzda Select yetkisi vermek için ,
[php] GRANT SELECT ON Person.Address TO cagdas [/php]
Bu kullanıcımız ile delete, insert, update işlemleri yapmak istediğimizde aşağıdaki gibi hata verecektir.
Şimdi de bu kullanıcımıza yeni yetkiler verelim.
[php] GRANT UPDATE,DELETE ON Person.Address TO cagdas [/php]
Hata veren sorgumuzu yeniden çalıştıralım.
Artık kullanıcımız update ve delete işlemlerini de gerçekleştirebilecek.
Kullanıcımıza yetkileri verdik ama bazı işlemleri kısıtlamak istiyoruz. Bu konuda ihtiyacımız olan komut DENY olacaktır.
DENY Kullanımı
Tanımlanan kullanıcılara kısıtlamalar oluşturmak için kullanılır. Grant komutunun ters işlevini görür.
Genel kullanımı ,
[php] DENY kisitlamalar ON kisitlanacak_alan TO kullanici [/php]
Tablomuza insert etme kısıtlamasını örnek üzerinden inceleyelim.
[php] DENY INSERT ON Person.Address TO cagdas [/php]
sorgusu ile kullanıcımızın yetkisini kısıtlamış olduk.
Elimizdeki bir datayı insert etmeye çalışalım.
Görüldüğü üzere kullanıcımız insert işlemini gerçekleştiremiyor.
Kullanıcımız artık SELECT,DELETE ve UPDATE komutlarını kullanabiliyorken, INSERT yapamamaktadır.
Başka bir örnek daha yapalım ve öğrendiğimiz iki komutu da bu örnek üzerinden uygulayalım.
Örnek : Verdiğimiz UPDATE ve DELETE yetkilerini geri alalım ve sonrasında INSERT yetkisini verelim.
[php] DENY UPDATE,DELETE ON Person.Address TO cagdas [/php]
cagdas kullanıcısının update ve delete kullanımını kısıtlamış olduk. Şimdi de yeni yetkimiz verelim.
[php] GRANT INSERT ON Person.Address TO cagdas [/php]
Bu sorgumuz ile de kullanıcımıza Insert yetkisini verdik.
Az önce hata aldığımız veriyi yeniden insert edelim.
Yetkileri ve kısıtlamaları tanımladık ama bu kez de o yetkilere değil de başka yetkiye ihtiyacı varsa bu kullanıcımızın o zaman ne yapacağız ?
REVOKE kullanımı
Bu komut ile veri tabanı üzerinde oluşturduğumuz kullanıcının yetkilerini ve kısıtlamalarını geri alabiliriz.
Örneğin kullanıcımıza hangi yetki ve kısıtlamaları verdiğimizi hatırlamıyorsak ya da tümünü iptal edip sadece select yetkisi vermek istiyorsak ;
[php] REVOKE ALL ON Person.Address TO cagdas [/php]
ile kullanıcımızın tüm yetki ve kısıtlamalarını iptal edip ,
[php] GRANT SELECT ON Person.Address TO cagdas[/php]
Bu sorgumuz ile sadece select yetkisi olacak şekilde tanımlayabiliriz.
NOT : REVOKE ile kullanıcımızı silmiyor yine login olmaya devam ediyoruz. Yapılan işlem ile sadece izin ve kısıtlamalarını iptal ediyoruz.
Yetkilendirme süreçleri veri tabanı yöneticilerinin öncelikli görevleri arasında olup çok çeşitli yetkilendirme durumları mevcuttur.Bu çeşitliliğin temel amacı ise , verinin güvenliğini en doğru şekilde sağlamaktır.
Bu yazımızda login olma ve user oluşturma ile ilgili örnekler yaptık. Daha sonrasında yetkilendirme üzerine örnekler yaparak yetki verme,kısıtlama ve tüm izinleri iptal etme konularına değinmiş olduk.
Umarım faydalı bir içerik olmuştur.
Hoşça kalın 😊