Merhaba Webkolog takipçileri!
Bir veri tabanının kalbi sadece verilerin depolandığı yer değil, aynı zamanda bu verilere kimlerin, nasıl erişebileceğini ve hangi işlemleri yapabileceğini belirleyen yetkilendirme mekanizmasıdır. Büyük veya küçük fark etmeksizin her veri tabanı uygulamasında güvenlik ve veri bütünlüğü, doğru yetkilendirme ile sağlanır. İşte bu noktada Data Control Language (DCL) komutları, yani GRANT, DENY ve REVOKE devreye giriyor. Bugün sizlerle, MS SQL Server'da kullanıcı ve rol yönetimiyle birlikte bu DCL işlemlerini ve yetki hiyerarşisini detaylıca inceleyeceğiz. Hazırsanız, veri tabanı güvenliğini sağlamaya başlayalım!
---Yetkilendirme Neden Bu Kadar Önemli?
Veri tabanı yetkilendirmesi, hassas bilgilere yetkisiz erişimi engellemek ve kullanıcıların sadece işlerini yapmak için ihtiyaç duydukları verilere erişmelerini sağlamak için hayati öneme sahiptir. Yanlış yapılandırılmış yetkiler, veri sızıntılarına, veri bütünlüğü bozulmalarına ve ciddi güvenlik açıklarına yol açabilir.
SQL Server'da Yetki Hiyerarşisi ve Baskınlık
MS SQL Server'da yetkiler, bir hiyerarşi içinde yönetilir. Bir kullanıcıya veya role aynı anda birden fazla yetki atanabilir veya engellenebilir. Yetki çakışmaları durumunda bir baskınlık (precedence) kuralı vardır:
DENY > GRANT > REVOKE
- Bir kullanıcıya bir yetki DENY edildiğinde, bu yetki tüm GRANT'leri ve REVOKE'ları geçersiz kılar. En katı kuraldır.
- GRANT ile verilen yetkiler, REVOKE ile kaldırılmadığı sürece geçerlidir.
- REVOKE ise, önceden verilmiş bir GRANT'i veya yapılmış bir DENY'i kaldırarak yetkiyi varsayılan durumuna (yani tanımlı değil) döndürür.
Roller: Yetkileri Gruplandırmanın Yolu
Tek tek her kullanıcıya yetki vermek yerine, benzer yetkilere sahip kullanıcıları gruplamak için Roller kullanılır. Bir kullanıcıyı bir role üye yaparak, o rolün sahip olduğu tüm yetkileri otomatik olarak kazanır. Bu, yönetimi çok daha kolay ve düzenli hale getirir.
MS SQL Server'da başlıca üç tür rol bulunur:
1. Sunucu (Server) Rolleri
Sunucu düzeyindeki işlemleri yönetmek için kullanılırlar. Örneğin, veri tabanı oluşturma, sunucu ayarlarını değiştirme, güvenlik yönetimi gibi.
- sysadmin: SQL Server'daki en yetkili roldür. Her şeyi yapabilir. 'sa' kullanıcısı bu role üyedir.
- dbcreator: Veri tabanı oluşturabilir ve değiştirebilir.
- securityadmin: Login'leri ve sunucu yetkilerini yönetebilir.
- serveradmin: Sunucu genelindeki yapılandırma seçeneklerini yönetebilir.
- ...ve diğerleri (diskadmin, processadmin, setupadmin, bulkadmin).
2. Veri Tabanı (Database) Rolleri
Belirli bir veri tabanı içindeki yetkileri yönetmek için kullanılırlar. Örneğin, tabloları okuma, yazma, prosedür çalıştırma gibi.
- db_owner: Veri tabanının tam kontrolüne sahiptir, her türlü işlemi yapabilir.
- db_securityadmin: Veri tabanı içindeki yetkileri ve rolleri yönetebilir.
- db_datareader: Kullanıcı tablolarından veri okuyabilir (SELECT).
- db_datawriter: Kullanıcı tablolarına veri ekleyebilir, güncelleyebilir ve silebilir (INSERT, UPDATE, DELETE).
- db_ddladmin: Veri tabanı üzerinde DDL (CREATE, ALTER, DROP) komutlarını çalıştırabilir.
- db_backupoperator: Veri tabanının yedeğini alabilir.
- db_denydatawriter: Kullanıcı tablolarına veri yazamaz (INSERT, UPDATE, DELETE).
- db_denydatareader: Kullanıcı tablolarından veri okuyamaz (SELECT).
3. Uygulama (Application) Rolleri
Uygulamaların belirli ihtiyaçlarına göre özelleştirilmiş, veri tabanı rolü gibi davranan ancak yalnızca uygulama aracılığıyla etkinleştirilebilen rollerdir. Daha çok belirli bir uygulamanın yetkilendirme mantığını veri tabanına taşımak için kullanılırlar.
---DCL Komutları: Yetki Vermek, Engellemek ve Kaldırmak
1. GRANT: Yetki Vermek
Bir kullanıcıya veya role belirli bir veri tabanı nesnesi üzerinde (tablo, view, stored procedure vb.) belirli yetkiler vermek için kullanılır.
-- 'Ali' adlı kullanıcıya 'Personel' tablosunda SELECT (okuma) yetkisi verelim.
GRANT SELECT ON Personel TO Ali;
-- 'Mehmet' kullanıcısına 'Urunler' tablosunda INSERT ve UPDATE yetkisi verelim.
GRANT INSERT, UPDATE ON Urunler TO Mehmet;
-- 'Tüm Veri Tabanı Kullanıcıları' anlamına gelen PUBLIC'e bir View üzerinde SELECT yetkisi verelim.
GRANT SELECT ON v_SiparisDetaylari TO PUBLIC;
-- 'Ayşe' kullanıcısına 'Musteriler' tablosunda SELECT ve INSERT yetkisi verelim
-- ve bu yetkiyi başkalarına da verebilme hakkını tanıyalım (WITH GRANT OPTION).
GRANT SELECT, INSERT ON Musteriler TO Ayse WITH GRANT OPTION;
-- 'Dbcreator' sunucu rolüne 'YeniKullanici' adlı logini ekleyelim.
ALTER SERVER ROLE dbcreator ADD MEMBER YeniKullanici;
-- 'db_datareader' veri tabanı rolüne 'OkuyucuKullanici' adlı kullanıcıyı ekleyelim.
ALTER ROLE db_datareader ADD MEMBER OkuyucuKullanici;
2. DENY: Erişimi Engellemek (Kesinlikle Yasaklamak)
Bir kullanıcıya veya role belirli bir yetkiyi açıkça yasaklamak için kullanılır. DENY, GRANT'ten daha yüksek bir önceliğe sahiptir. Bir yetki bir kez DENY edildiğinde, o yetki başka bir yolla (rol üyeliği veya GRANT) verilse bile geçerli olmaz.
-- 'Ali' kullanıcısının 'Maaşlar' tablosundan SELECT yapmasını engelleyelim.
DENY SELECT ON Maaslar TO Ali;
-- 'PazarlamaGrubu' rolündeki tüm üyelerin 'MusteriAdresleri' tablosuna INSERT ve UPDATE yapmasını engelleyelim.
DENY INSERT, UPDATE ON MusteriAdresleri TO PazarlamaGrubu;
-- 'Ayşe' kullanıcısının yeni tablo oluşturmasını engelleyelim.
DENY CREATE TABLE TO Ayse;
3. REVOKE: Yetki Tanımını Kaldırmak
Daha önce GRANT veya DENY ile verilmiş/engellenmiş bir yetki tanımını kaldırmak için kullanılır. REVOKE, yetkiyi varsayılan durumuna (tanımsız) döndürür. Yani, eğer bir kullanıcıya başka bir yolla (örneğin bir role üyelik) aynı yetki verilmişse, REVOKE sadece açıkça yapılan GRANT veya DENY'yi kaldırır, rol üyeliğinden gelen yetkiyi etkilemez.
-- 'Ali' kullanıcısından 'Personel' tablosundaki SELECT yetkisini kaldıralım (daha önce GRANT ile verilmişse).
REVOKE SELECT ON Personel FROM Ali;
-- 'Mehmet' kullanıcısından 'Urunler' tablosundaki INSERT yetkisinin DENY'sini kaldıralım.
REVOKE DENY ON Urunler TO Mehmet; -- Bu biraz kafa karıştırıcı olabilir, doğrudan yetkiyi kaldırmak için 'FROM' kullanılır.
-- Yani, eğer DENY edilmişse, o DENY kaydını siler.
-- Eğer bir kullanıcıya 'WITH GRANT OPTION' ile yetki verilmişse ve bu yetkiyi başkalarına da dağıtmışsa,
-- CASCADE kullanarak o kullanıcının verdiği tüm yetkileri de kaldırabiliriz.
REVOKE ALL ON Birey FROM Ali CASCADE;
---
Login ve User Oluşturma
SQL Server'a bir kullanıcının erişebilmesi için öncelikle bir Login (sunucu düzeyinde kimlik doğrulama) oluşturulmalı, ardından bu Login'in belirli bir veri tabanına erişimi için bir User (veri tabanı düzeyinde kullanıcı) oluşturulup ilişkilendirilmelidir.
-- Yeni bir SQL Server Login'i oluşturma
CREATE LOGIN WebkologLogin
WITH PASSWORD = 'GucluSifre123!',
CHECK_POLICY = ON, -- Parola karmaşıklık politikasını kontrol et
CHECK_EXPIRATION = ON; -- Parola süresinin dolup dolmadığını kontrol et
-- Bu Login'i belirli bir veri tabanında bir User ile ilişkilendirme
USE BenimVeritabanim; -- Hangi veri tabanında User oluşturulacaksa o seçilir
CREATE USER WebkologUser FOR LOGIN WebkologLogin;
-- Windows kimlik doğrulaması kullanan bir Login oluşturma
CREATE LOGIN [DOMAIN\WindowsKullaniciAdi] FROM WINDOWS
WITH DEFAULT_DATABASE = AdventureWorks2019,
DEFAULT_LANGUAGE = Turkish;
-- Kullanıcı silme
DROP USER WebkologUser;
-- Login silme
DROP LOGIN WebkologLogin;
---
MS SQL Server'daki yetkilendirme ve DCL işlemleri, veri tabanı güvenliğinin temelini oluşturur. Doğru yetkilendirme stratejileriyle, verilerinizin yetkisiz erişimden korunmasını sağlayabilir, aynı zamanda kullanıcılarınıza işlerini yapmaları için gerekli minimum yetkileri tanımlayarak "en az ayrıcalık" prensibini uygulayabilirsiniz. Bu karmaşık ve kritik konuyu bolca pratik yaparak pekiştirmenizi şiddetle tavsiye ederim!
Webkolog'u takipte kalın!
Hepinize hatasız ve güvenli kodlama deneyimleri dilerim!
0 yorum:
Yorum Gönder