Kerberos ve NTLM, Microsoft ortamlarında kimlik doğrulama için kullanılan iki farklı protokoldür. Kerberos, daha modern ve güvenli bir kimlik doğrulama protokolüdür. NTLM (NT LAN Manager), eski bir protokol olup daha az güvenlidir ve genellikle eski sistemlerde veya domain’e dahil olmayan makinelerde kullanılır.
Eğer Active Directory (AD) ortamında çalışan bir SQL Server yapınız varsa, Kerberos kullanmalısınız. Ancak bazı durumlarda sistem otomatik olarak NTLM’ye düşebilir.
1. NTLM Nedir?
NTLM (NT LAN Manager), Microsoft tarafından geliştirilen eski bir kimlik doğrulama protokolüdür. 1960’larda geliştirilmiş LM (Lan Manager) modelinin bir uzantısıdır. Şifreleme mekanizması zayıftır ve modern saldırılara karşı dayanıklı değildir.
Kimlik doğrulama işlemi 3 aşamalıdır:
1. Kullanıcı adı ve şifre hash’lenir
2. Sunucu ile hash karşılaştırılır
3. Eğer hash eşleşirse, erişim verilir
NTLM’in Dezavantajları:
Kimlik doğrulama süreci güvenlik açısından zayıf (Şifre hash’leri kolay kırılabilir).
Single Sign-On (SSO) desteği yok (Her bağlantıda kimlik doğrulama gerekir).
Özellikle çoklu sunucu (Multi-hop) bağlantılarda çalışmaz.
Modern güvenlik standartlarına uygun değildir.
2. Kerberos Nedir?
Kerberos, MIT tarafından geliştirilmiş ve Microsoft’un Windows 2000 ile birlikte Active Directory’ye entegre ettiği bir kimlik doğrulama protokolüdür.
Daha güvenli ve çoklu adım kimlik doğrulaması sağlar. Single Sign-On (SSO) destekler, yani bir kez giriş yapınca birçok hizmete erişebilirsiniz. Kimlik doğrulama süreci şifreli bilet (ticket) sistemine dayanır. Çoklu sunucu (multi-hop) bağlantıları destekler, bu yüzden özellikle SQL Server gibi birden fazla sunucuya bağlantı gerektiren sistemler için idealdir.
Kerberos’un Çalışma Prensibi
Kerberos, 3 temel bileşenden oluşur:
1. KDC (Key Distribution Center) → Anahtar yönetimini sağlar.
2. TGT (Ticket Granting Ticket) → Kullanıcıya kimlik doğrulama bileti verir.
3. Service Ticket → Kullanıcı, belirli bir hizmete erişmek için bunu kullanır.
Kerberos kimlik doğrulaması sırasında:
1. Kullanıcı Active Directory’ye giriş yapar ve bir “TGT (Ticket Granting Ticket)” alır.
2. SQL Server gibi bir hizmete bağlanırken, bu bileti kullanarak erişim talep eder.
3. Kimlik doğrulama başarılı olursa, bir “Service Ticket” verilir ve kullanıcı hizmete bağlanır.
3-Kerberos vs NTLM Karşılaştırması
Özellik | NTLM | Kerberos |
Güvenlik | Daha düşük güvenlik | Daha güçlü güvenlik |
Kimlik Doğrulama | Şifre hash’ine dayanır | Ticket-based (bilet) kimlik doğrulama |
Single Sign-On (SSO) | Yok | Var |
Çoklu sunucu (Multi-Hop) desteği | Yok | Var |
Hız | Eski sistemlerde çalışır | Yeni sistemlerde daha iyi çalışır |
Eski sistem desteği | Alternatif olarak çalışır | Tavsiye edilir |
Güvenlik Zafiyetleri | Hash tabanlı saldırılara açık | Daha güvenli şifreleme kullanır |
4. SQL Server İçin Kerberos Kullanımı
SQL Server’da Kerberos kullanabilmeniz için şunlara dikkat etmelisiniz:
1-SQL Server servis hesabı için SPN (Service Principal Name) kaydedilmiş olmalı.
2-SQL Server’a bağlanırken Windows Authentication kullanılmalı.
3-SQL Server client (SSMS veya uygulama), aynı domain içinde olmalı.
4-Active Directory ortamında çalışıyor olmalısınız.
SPN kaydı yoksa otomatik olarak NTLM kullanılır.
SPN Kaydını Kontrol Etme
SQL Server’da kullanılan SPN’leri görmek için aşağıdaki komutu çalıştırabilirsiniz:
setspn -L DOMAIN\SQLServerServisHesabı
Eğer SPN kaydı yoksa, Kerberos yerine NTLM kullanılacaktır. Yukarıdaki komutla baktığımızda kerbelos yapılan sunucuların konuştuğu görülür.
SPN Kaydı Eklemek (Elle Kayıt)
Eğer SPN eksikse, şu komutları kullanarak ekleyebilirsiniz:
setspn -S MSSQLSvc/SQLServerAdı:1433 DOMAIN\SQLServerServisHesabı
setspn -S MSSQLSvc/SQLServerAdı.DOMAIN:1433 DOMAIN\SQLServerServisHesabı
MSSQLSvc/ bu ifade default şeklindedir.
5. Hangi Durumlarda NTLM Kullanılır?
Eğer Kerberos kullanımı mümkün değilse, NTLM devreye girer.
NTLM’nin kullanıldığı durumlar:
1- SQL Server ve istemcinin farklı domain’lerde olması.
2- Active Directory yapılandırılmamış veya hatalı olması.
3- SPN kaydının eksik olması.
4- SQL Server’ın, Windows Authentication yerine SQL Authentication kullanması.
6. Sonuç: Hangi Kimlik Doğrulama Yöntemini Kullanmalısınız?
Eğer Active Directory ortamında bir SQL Server çalıştırıyorsanız, kesinlikle Kerberos kullanmalısınız.
1-Daha güvenlidir.
2- Daha hızlıdır.
3- Single Sign-On (SSO) desteği sunar.
4- Multi-hop bağlantılar için uygundur.
Ama Kerberos çalışmazsa, sistem otomatik olarak NTLM’ye geçer. Bu yüzden SPN kayıtlarını ve AD yapılandırmanızı kontrol etmelisiniz.
Aşağıdaki sorgu ile sql server üzerinde açık olan connecitonsları görebiliriz.
select*from sys.dm_exec_connections

Yukarıdaki resimde shared memory localden bağlandığından dolayı NTLM olmasında herhangi bir sakınca bulunmamaktadır. Localdeki ssms üzerinden bağlandığımızda görülmektedir. SQL ifadesi sql server’a sql aut. ile giriş yapıldığını ama shared memory olmayan diğer NTLM bağlantısı kerberos bağlantısına geçirilmesi gerekmektedir. SQL Server kendi yerel kimlik doğrulama mekanizmasını kullanırBağlantı tamamen SQL Server’ın kendi kullanıcı veritabanı üzerinden yönetilir
Connection stringinde Integrated Security=SSPI; yazılması bağlantının windows aut. Olduğunu ve kerbelos bağlantıs sağladığını gösterir. Bu bağlantı aynı zaman ntlm yapısındada bağlantı olmasını sağlar.
Aşağıdaki komut ile sql server üzerinde hangi kullanıcıların NTLM bağlantısı olduğunu detaylı bir şekilde görebiliriz.
select c.session_id, DB_NAME(s.database_id) AS VERITABANI,C.auth_scheme, s.host_name,s.program_name,
s.login_name,
s.original_login_name,
s.status, c.client_net_address,c.client_tcp_port,c.local_net_address,c.local_tcp_port,
c.net_transport, c.encrypt_option from sys.dm_exec_connections c
join sys.dm_exec_sessions s on c.session_id=s.session_id
where C.auth_scheme LIKE 'NTLM'
select DB_NAME(s.database_id) AS VERITABANI,COUNT(C.auth_scheme)AS TOPLAM_NTLM from sys.dm_exec_connections c
join sys.dm_exec_sessions s on c.session_id=s.session_id where C.auth_scheme LIKE 'NTLM'
AND S.login_name NOT IN ('domainname\username')
GROUP BY DB_NAME(s.database_id)
ORDER BY VERITABANI
Not: Bazen NTLM olarak gözükmesinin sebebi active directory tarafında sertifikalı gelen ifadenin gitmiş olduğu uygulamanın veya ortamın sertifikasız olmasıdır.
Başka bir makalede görüşmek dileğiyle..
“Onlar, gaybe inanırlar, namazı dosdoğru kılarlar ve kendilerine rızık olarak verdiklerimizden infak ederler.” Bakara Suresi, 3. Ayet