Service Principal Name(SPN)

Bu makalede SPN kavramının ne olduğuna değinmiş olacağım. Sql server da çok sık karşılaştığımız bu kavramın ne olduğuna değinelim.

SPN (Service Principal Name), bir servisin, Kerberos Authentication protokolü aracılığıyla doğrulama yapmak için kullanılan benzersiz bir kimliktir. SPN, Active Directory (AD) ortamında bir servis ile ilişkilendirilmiş olan bir tanımlayıcıdır ve o servisin bir ağda kimlik doğrulama işlemlerinde tanınmasını sağlar.

SQL Server’a bağlanırken, SQL Login kullanan bir kullanıcı SQL Server Authentication ile kimlik doğrulaması yapar.

SPN’ler ise Kerberos Authentication için gereklidir, yani SQL Server, bir istemcinin bağlanırken Kerberos üzerinden kimlik doğrulaması yapması gerektiğinde SPN’lere başvurur. Kısacası Windows Authentication için gerekli bir kavramdır. SPN’ler, Active Directory’deki hesaplar ile ilişkilendirilmiş ve ağ üzerinden iletişimi sağlayan kimlik doğrulama bilgileridir.

SPN Örneği:

MSSQLSvc/sqlserver01.contoso.com:1433

Açılımı:

  • MSSQLSvc → SQL Server hizmeti
  • sqlserver01.contoso.com → Hem bilgisayar adını, hem de ait olduğu domain adlarını içerir.
  • 1433 → SQL Server’ın dinlediği TCP portu

Bu SPN, istemcilerin sqlserver01.contoso.com sunucusunda 1433 portundan SQL Server’a bağlanırken Kerberos ile kimlik doğrulaması yapmasını sağlar.

SPN’nin Kullanım Alanları:

  1. SPN’ler, SQL Server instance’ları ve diğer hizmetler için, Kerberos Authentication sağlamak amacıyla Active Directory içinde yapılandırılır. Bu, istemci uygulamasının, sunucuya bağlanabilmesi için gerekli kimlik doğrulamasını yapabilmesini sağlar.
  2. SQL Login ile bağlanan bir kullanıcı, SPN’lerin ne olduğunu veya hangi SPN’nin kullanıldığını doğrudan göremez. SPN’ler, ağdaki kimlik doğrulama süreçlerinde arka planda çalışır.

Kullanıcı ve SPN İlişkisi:

  • Eğer bir kullanıcı SQL Server’a bağlanırken Kerberos kullanıyorsa, SQL Server, istemci ile sunucu arasındaki bağlantı için doğru SPN’yi kullanır. Ancak, SPN’ler yalnızca ağdaki güvenlik doğrulaması ve iletişimi için kullanılır, kullanıcının doğrudan görmesi ya da erişmesi gereken bir bilgi değildir.
  • SPN’ler setspn komutları veya Active Directory aracılığıyla yönetilir, ve bu bilgiler genellikle veritabanı yöneticileri ya da sistem yöneticileri tarafından kontrol edilir.

Kerberos ve NTLM:

  • Eğer SPN doğru şekilde yapılandırılmamışsa, Kerberos authentication devreye girmeyebilir ve SQL Server bağlantısı NTLM (Windows’un bir başka kimlik doğrulama protokolü) ile yapılabilir. Bu durumda, SPN’lerin rolü azalır, ancak yine de arka planda doğru kimlik doğrulaması için gerekli olabilir.

Sonuç:

SPN, bir ağda bir servisin kimlik doğrulaması için kritik öneme sahiptir. SQL Server gibi veritabanı servisleri veya web uygulamaları gibi servisler için doğru SPN ayarlamaları, güvenli ve düzgün çalışan kimlik doğrulama işlemlerinin sağlanabilmesi için gereklidir.

SQL Login ile bağlanan bir kullanıcı, doğrudan SPN (Service Principal Name) bilgilerini görmez. Ancak, SPN’ler Kerberos Authentication’ı doğru bir şekilde çalıştırabilmek için kullanılır, yani SPN’ler, istemci ile sunucu arasındaki güvenli bağlantıyı sağlamak için gereklidir. SQL Server ve istemci arasında bir Kerberos kimlik doğrulaması yapıldığında, SPN’ler arka planda otomatik olarak kullanılır, fakat doğrudan kullanıcıya gösterilmez.

Aşağıdaki yapı ile spn kayıtları kontrol edilmektedir. Powershell üzerinden çalışmaktadır. Sql server servis hesanı yazılmaktadır. Aşağıdaki kontrol sql server kurulu olan sunucu üzerinde yapılmaktadır. Cmd komut satırı yönetici olarak çalıştırıldığında da yapılmaktadır.

setspn -L "Sql_Servis_Hesabı"

Servis hesabı birden fazla sunucuda set edilmişse tek bir sunucu üzerinde spn kayıtlarının set edilmesi gerekmektedir.

Sunucu üzerinde Spn kayıtları için aşağıdaki komutlar kullanılmaktadır. Powershell veya CMD üzerinden çalışmaktadır. Bu işlemler Active directory sunucusu üzerinde yapılmaktadır.

Not: Sql server kurulu olan sunucu üzerinde 4 tane SPN kaydı yapılmaktadır.

# SQL Server Availability Group için SPN-Listener Port
setspn -S MSSQLSvc/AG_Listener.yunusyucel.com:1453 YCL2025\SqlUser
setspn -S MSSQLSvc/AG_Listener.yunusyucel.com:INSTANCE_NAME YCL2025\SqlUser

# Sunucu ilgili port için SPN-Sql Servis Port
setspn -S MSSQLSvc/Server1.yunusyucel.com:1433 YCL2025\SqlUser
setspn -S MSSQLSvc/Server2.yunusyucel.com:1433 YCL2025\SqlUser

# Sql Server Instance için SPN
setspn -S MSSQLSvc/Server1.yunusyucel.com:INSTANCE_NAME YCL2025\SqlUser
setspn -S MSSQLSvc/Server2.yunusyucel.com:INSTANCE_NAME YCL2025\SqlUser

Yanlış oluşturulan Spn kayıtlarını silmek için aşağıdaki yöntem kullanılmaktadır.

setspn -d  MSSQLSvc/S3.yunusyucel.com:1433 YCL2025\SqlUser
setspn -d  MSSQLSvc/S3.yunusyucel.com:INSTANCE_NAME YCL2025\SqlUser
setspn -d  MSSQLSvc/AG_Listener.yunusyucel.com:1453 YCL2025\SqlUser
setspn -d  MSSQLSvc/AG_Listener.yunusyucel.com:INSTANCE_NAME YCL2025\SqlUser

Gerçek sistemlerde linked server ortamlarında kullanılan farklı instance’larda spn kaydına eklenmektedir. Burada Linked server instance şeklinde tanımlanmışsa ilgili instance sqn kaydı ve mevcut sunucu ve sql port numarası için sqn kaydının oluşturulması gerekmektedir. Toplamda 2 tane SPN kaydı yapılmaktadır.

Önemli Not:

  • Domain Admin yetkileri gerekebilir.
  • SPN’lerin unique olması gerekiyor.
  • SqlUser hesabının “Log on as a service” hakkı olmalıdır.
  • Firewall’dan sql server portu veya listener portu açık olmalıdır.

Başka bir makalede görüşmek dileğiyle.

“Allah içinizden iman edenlerin ve kendilerine ilim verilenlerin derecelerini yükseltir.” Mücâdele – 11

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir