ID card, key and locks, representing SQL Server authentication and authorization

SQL Server’da Kimlik Doğrulama ve Yetkilendirme: Login, User, Roller ve En Az Yetki

SQL Server’da kimlik doğrulama ile yetkilendirme farkı: Windows, SQL ve Entra ID login’leri, login ve user farkı, orphaned user’lar, roller ve uygulama hesapları için en az yetki.

Mart 31, 2023

SQL Server güvenliği iki ayrı soruya dayanır. Authentication (kimlik doğrulama) “bağlanan kişi gerçekten iddia ettiği kişi mi?” sorusunu yanıtlar. Authorization (yetkilendirme) ise “bu kişi içeri girdikten sonra neyi yapabilir?” sorusunu. İkisi sıklıkla karıştırılır; oysa sahada gördüğümüz güvenlik açıklarının çoğu ikinci sorudan doğar: doğru kimlik doğrulamasıyla bağlanan ama gereğinden çok yetkiye sahip hesaplar.

Bu yazıda SQL Server’da kimlik doğrulama yöntemlerini, login ile user farkını, yetkilerin nasıl verildiğini ve en az yetki ilkesinin pratikte nasıl uygulanacağını anlatıyoruz.

SQL Server Güvenlik Danışmanlığı

Kim neye erişebiliyor, biliyor musunuz?

Aryasoft, SQL Server ortamınızın yetki matrisini çıkarır; gereğinden geniş yetkileri en az yetki ilkesine göre düzeltir.

Destek Alın

Authentication: Kimsiniz?

Yöntem Nasıl çalışır Ne zaman
Windows Authentication Kimlik Windows ya da Active Directory tarafından doğrulanır; parola SQL Server’a gönderilmez Etki alanındaki kullanıcılar ve servisler için ilk tercih
SQL Server Authentication Kullanıcı adı ve parola SQL Server’da saklanır ve doğrulanır Etki alanı dışından bağlanan uygulamalar, Linux istemciler, bazı üçüncü parti yazılımlar
Microsoft Entra ID Kimlik bulut dizininde doğrulanır; MFA desteklenir Azure SQL ve Azure Arc ile bağlanan SQL Server ortamları

Sunucu ya yalnızca Windows Authentication’ı ya da Windows ile SQL Authentication’ı birlikte (Mixed Mode) kabul eder. Mümkünse yalnızca Windows Authentication kullanın: parola politikası, hesap kilitleme ve hesabın kapatılması merkezden yönetilir. Mixed Mode gerekiyorsa SQL login’lerinde parola politikasını zorunlu kılın ve sa hesabını devre dışı bırakın ya da yeniden adlandırın.

Login ve User Farkı

  • Login sunucu düzeyindedir: SQL Server’a bağlanma hakkını temsil eder.
  • User veritabanı düzeyindedir: login’in belirli bir veritabanındaki karşılığıdır.

Bir login’in bir veritabanına erişebilmesi için o veritabanında bir user’a eşlenmesi gerekir. Eşleme SID üzerinden yapılır; bu yüzden bir veritabanı başka bir sunucuya restore edildiğinde, aynı adlı login farklı SID ile oluşturulmuşsa user “orphaned” kalır ve login bağlansa bile veritabanına erişemez.

-- Login'i olmayan (orphaned) kullanıcılar
SELECT dp.name AS user_name, dp.type_desc, dp.sid
FROM sys.database_principals AS dp
LEFT JOIN sys.server_principals AS sp ON sp.sid = dp.sid
WHERE sp.sid IS NULL
  AND dp.type IN ('S', 'U', 'G')
  AND dp.authentication_type_desc = N'INSTANCE'
  AND dp.name NOT IN (N'dbo', N'guest', N'INFORMATION_SCHEMA', N'sys');

-- Orphaned SQL kullanıcısını mevcut login'e yeniden bağlamak
ALTER USER UygulamaKullanicisi WITH LOGIN = UygulamaKullanicisi;

İpucu

Contained database user’lar, login’e ihtiyaç duymadan doğrudan veritabanı içinde kimlik doğrulaması yapar. Veritabanı başka bir sunucuya taşındığında ya da Always On ile failover olduğunda login eşleme sorunu yaşanmaz. Kullanmak için sunucuda contained database authentication açılmalı ve veritabanı PARTIAL containment ile yapılandırılmalıdır.

Authorization: Ne Yapabilirsiniz?

Yetkiler iki düzeyde verilir:

  • Sunucu düzeyi: sysadmin, securityadmin, serveradmin gibi sabit sunucu rolleri ve VIEW SERVER STATE, ALTER ANY LOGIN gibi sunucu yetkileri. SQL Server 2022 ve sonrasında ##MS_ServerStateReader## gibi yeni ve daha dar kapsamlı sabit roller de bulunur.
  • Veritabanı düzeyi: db_owner, db_datareader, db_datawriter gibi sabit roller; kendi tanımladığınız roller ve şema ya da nesne düzeyinde GRANT, DENY, REVOKE.
-- Uygulama için yalnızca gereken yetkiyle bir rol
CREATE ROLE UygulamaRol;
GRANT SELECT, INSERT, UPDATE ON SCHEMA::Satis TO UygulamaRol;
GRANT EXECUTE ON SCHEMA::Satis TO UygulamaRol;
ALTER ROLE UygulamaRol ADD MEMBER UygulamaKullanicisi;

Yetkileri kişilere değil rollere, rollere de mümkünse şema düzeyinde verin. Yeni bir tablo ya da procedure eklendiğinde rolün yetkisi otomatik olarak onu da kapsar.

Uyarı

Uygulama hesaplarına sysadmin ya da db_owner vermek, sahada en sık gördüğümüz güvenlik açığıdır. Uygulamada bir SQL injection açığı varsa, saldırgan uygulama hesabının tüm yetkilerini devralır; sysadmin bir hesap, sunucudaki tüm veritabanlarına ve hatta işletim sistemine erişim demektir. Uygulama hesapları yalnızca ihtiyaç duydukları şemalarda, ihtiyaç duydukları yetkilere sahip olmalıdır.

Kimin Ne Yetkisi Var?

-- sysadmin üyeleri
SELECT sp.name, sp.type_desc, sp.is_disabled
FROM sys.server_role_members AS rm
JOIN sys.server_principals AS sp ON sp.principal_id = rm.member_principal_id
WHERE rm.role_principal_id = SUSER_ID(N'sysadmin');

-- Bu veritabanında db_owner üyeleri
SELECT dp.name, dp.type_desc
FROM sys.database_role_members AS rm
JOIN sys.database_principals AS dp ON dp.principal_id = rm.member_principal_id
WHERE rm.role_principal_id = DATABASE_PRINCIPAL_ID(N'db_owner');

Ayrıcalıklı hesapların düzenli gözden geçirilmesi ve yetki matrisinin belgelenmesi, güvenlik sıkılaştırma rehberimizin ilk adımıdır. Kimin ne yaptığını kaydetmek için SQL Server Audit kullanın.

Kontrol Listesi

  • Mümkünse yalnızca Windows Authentication; Mixed Mode’da parola politikası zorunlu.
  • sa devre dışı ya da yeniden adlandırılmış.
  • sysadmin üyeleri az ve bilinçli seçilmiş; kişiler değil AD grupları.
  • Uygulama hesapları sysadmin ya da db_owner değil; şema düzeyinde rol yetkileri kullanılıyor.
  • Orphaned kullanıcılar düzenli kontrol ediliyor.
  • Yetki matrisi belgelenmiş ve periyodik olarak gözden geçiriliyor.
Authentication, bağlanan kişinin kimliğini doğrular. Authorization, kimliği doğrulanmış kişinin neleri yapabileceğini belirler.
Mümkünse Windows Authentication. Parola SQL Server’a gönderilmez, parola politikası ve hesap yönetimi merkezden yapılır.
Login sunucuya bağlanma hakkıdır; user, login’in belirli bir veritabanındaki karşılığıdır. Eşleme SID üzerinden yapılır.
Eşleştiği login’in SID’i sunucuda bulunmayan veritabanı kullanıcısıdır. Genellikle başka bir sunucuya restore sonrasında oluşur ve ALTER USER … WITH LOGIN ile düzeltilir.

SQL Server Güvenlik Danışmanlığı

Yetkileri en az yetki ilkesine göre düzenleyin

Aryasoft’un kıdemli DBA ekibi SQL Server ortamınızın yetki matrisini çıkarır, ayrıcalıklı hesapları gözden geçirir ve uygulama hesaplarını yalnızca ihtiyaç duydukları yetkilerle çalışır hale getirir.

4.7/5