Temel
Login, user, rol farkı SQL Server güvenliği dersinde. Burada asıl iş soru: bir yıl sonra hesaba bakıp "bu kişi neye erişiyor, neden?" diyebilmek.
Motor sınırıMotorda tek kullanıcı var:
CREATE LOGIN, GRANT, DENY çalışmaz, hata verir. Görevlerde gerçek katalog görünümlerinin kurgu kopyalarını sorgularsın. Yetki gerçekte uygulanmaz.-- Çalışmaz, başvuru. Yetki kişiye değil role verilir CREATE LOGIN rapor_login WITH PASSWORD = N'<guclu parola>'; CREATE USER rapor_user FOR LOGIN rapor_login; CREATE ROLE rol_rapor; GRANT SELECT ON dbo.rapor_ozet TO rol_rapor; ALTER ROLE rol_rapor ADD MEMBER rapor_user; DENY SELECT ON dbo.bank_customers TO rapor_user; REVOKE SELECT ON dbo.rapor_ozet FROM rol_rapor;
Kural: DENY kazanır
- DENY, GRANT'ın ve rolden gelenin önüne geçer.
- Nesne sahibi ve
sysadminüyesi için DENY işlemez. - Eskiden kalma istisna: tablo düzeyi DENY, sütun düzeyi GRANT'ın önüne geçmez.
- REVOKE yasaklamaz, yalnız kaydı siler: başka yerden gelen izin kalır.
Katalog
| Görünüm | Ne var |
|---|---|
sys.database_principals | Kullanıcı ve roller. type S kullanıcı, R rol |
sys.database_role_members | Kim hangi rolde |
sys.database_permissions | major_id nesne, grantee_principal_id alan, state G ya da D |
SELECT r.name AS rol, u.name AS uye FROM sys.database_role_members AS m JOIN sys.database_principals AS r ON r.principal_id = m.role_principal_id JOIN sys.database_principals AS u ON u.principal_id = m.member_principal_id ORDER BY rol, uye;
En az yetki
Hesap işini yapacak kadar yetki alır, fazlası saldırı yüzeyidir: ele geçirilen raporlama hesabı silememeli. Saldırı senaryosu için SQL injection savunması dersine bak. Kısa kontrol listesi:
- Servis hesabı
db_ownerolmasın. - Yetki role verilsin, doğrudan kişiye verilen yetki istisnadır ve gerekçe ister.
- Kapalı hesaplar kaldırılsın.