Service Principal Name (SPN)

Service Principal Name (SPN) nedir? Bu yazımızda Service Principal Name (SPN) hakkında konuşacağız. Active Directory ve SQL Server arasında Kerberos kimlik doğrulaması için kullanılan benzersiz bir tanımlayıcıdır. SQL Server instance’ının hangi Windows hesabı altında çalıştığını belirlemek için kullanılır. Kerberos kimlik doğrulaması, istemci ve sunucunun aynı Windows etki alanında veya güvenilen etki alanlarında olmasını ve SPN’nin Active Directory ile kaydedilmiş olmasını gerektirir. SPN kaydedilmediğinde veya kayıt başarısız olduğunda, Windows güvenlik katmanı hesabı SPN ile ilişkilendiremez ve Kerberos kimlik doğrulaması kullanılmaz. Kerberos nedir dediğimizde ise, Windows 2000’den itibaren Active directory etki alanları için varsayılan kimlik doğrulama protokolüdür. Simetrik şifreleme tekniği kullandığından dolayı NTLM’den daha güvenilir ve daha hızlıdır. Kerberos Authentiction’ın bize faydalarına bakarsak eğer, Client ve server arasında doğrulama yaparak güvenli bir şekilde doğrulama yapmaktadır. Biz buna Mutual Authentication diyoruz. Doğrulama yaparken server ve client arasında ticket alışverişi yapar ve bu alışveriş kriptoludur bu şekilde daha güvenli hale getirir. Bu durumu Secure […]

Service Principal Name (SPN)

Service Principal Name (SPN) nedir?

Bu yazımızda Service Principal Name (SPN) hakkında konuşacağız. Active Directory ve SQL Server arasında Kerberos kimlik doğrulaması için kullanılan benzersiz bir tanımlayıcıdır. SQL Server instance’ının hangi Windows hesabı altında çalıştığını belirlemek için kullanılır. Kerberos kimlik doğrulaması, istemci ve sunucunun aynı Windows etki alanında veya güvenilen etki alanlarında olmasını ve SPN’nin Active Directory ile kaydedilmiş olmasını gerektirir. SPN kaydedilmediğinde veya kayıt başarısız olduğunda, Windows güvenlik katmanı hesabı SPN ile ilişkilendiremez ve Kerberos kimlik doğrulaması kullanılmaz.

Kerberos nedir dediğimizde ise, Windows 2000’den itibaren Active directory etki alanları için varsayılan kimlik doğrulama protokolüdür. Simetrik şifreleme tekniği kullandığından dolayı NTLM’den daha güvenilir ve daha hızlıdır.

Kerberos Authentiction’ın bize faydalarına bakarsak eğer,

  • Client ve server arasında doğrulama yaparak güvenli bir şekilde doğrulama yapmaktadır. Biz buna Mutual Authentication diyoruz.
  • Doğrulama yaparken server ve client arasında ticket alışverişi yapar ve bu alışveriş kriptoludur bu şekilde daha güvenli hale getirir. Bu durumu Secure Authentication olarak adlandırıyoruz.
  • Bir kullanıcı oturum açtığında ticket’ın süresi dolmadığı sürece tekrardan loglama gereği duymaz ve entegre olarak çalışır. Buna Integrated Authentication olarak adlandırıyoruz.

Kerberos, güvenli bir network bağlantısı kurmadan önce client ve server arasında karşılıklı bir mekanizma oluşturur. Bu mekanizmanın yönetiminde trusted third party olan Key Distributed Center (KDC) kullanır.

SQL Server, Windows Authentication kullanırken, Windows Security Support Provider Interface (SSPI) aracılığı ile kerberos’u dolaylı olarak destekler. Eğer kerberos kullanılmıyorsa, Windows NT Challenge/Response (NTLM) authentication yöntemine geri döner ve SPN bağlantının kimliğini doğrulamak için Key Distributed Center (KDC)’a gönderilir.

 

 Görsel – 1: NTLM Connect

 

 Görsel – 2: Kerberos Connection

 

SQL Server aşağıdaki kimlik doğrulamalarını destekler;

  • TCP/IP
  • Named pipes
  • Shared memory

Service Principal Name (SPN) Active Directory’ye kayıtlı olmalıdır.  Windows, domainde Key Distributed Center (KDC) rolünü üstlenir. SPN, kaydolduktan sonra SQL Server Instance service’ini başlatan servis hesabı ile Windows hesabı eşleşir. SPN kaydı gerçekleştirilmediyse veya başarısız olursa, Windows güvenlik katmanı SPN ile ilişkili hesabı belirleyemez ve Kerberos kimlik doğrulaması kullanılmaz.

Eğer SPN otomatik olarak oluşmazsa manuel olarak eklenmesi gerekmektedir.  DAC kullanıcısı için yeni bir SPN kaydı oluşturmamız gerek yoktur DAC kullanıcısı NTLM bağlantısınıı kullanarak connect yapmaktadır.

Aşağıdaki sorgu ile bağlantıların nasıl yapıldığını görebiliriz.

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid

 

Aşağıdaki sorgu ile hangi bağlantıdan kaç kere yapıldığını görebiliriz.

SELECT COUNT(auth_scheme) as sessions_count, net_transport, auth_scheme

FROM sys.dm_exec_connections

GROUP BY net_transport, auth_scheme

 

Aşağıdaki sorgu ile hangi Client ve program üzerinden atılan bağlantılar görebiliriz.

SELECT DISTINCT

DB_NAME(database_id),

auth_scheme,

net_transport,

client_net_address,

local_tcp_port,

[host_name],

[program_name],

login_name

FROM sys.dm_exec_connections c JOIN

sys.dm_exec_sessions s ON c.session_id = s.session_id

WHERE [host_name] = SUBSTRING(@@SERVERNAME, 1, LEN(@@SERVERNAME) - CHARINDEX('\', REVERSE(@@SERVERNAME)));

SPN kayıtlarının otomatik olarak yapılmasını istiyorsanız SQL Server Service hesabına;

  • Read servicePrincipalName
  • Write servicePrincipalName

yetkilerinin verilmesi gerekmektedir.

Konu hakkında daha detaylı bilgi almak için aşağıdaki linki okuyabilirsiniz.

https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/faqs-around-kerberos-and-sql-server/ba-p/367574

 

SPN benzersiz bir tanımlayıcı olduğu için Active directory katmanında tek olması gerekmektedir. Duplicate olması durumunda hangi SPN’leri duplicate olduğu bulunup kaldırılması gerekmektedir. Bu işlemlerin hepsi Powershell üzerinden Run as Administrator olarak çalıştırılarak dikkatli bir şekilde yapılmalıdır.

İlgili sunucuda eksik olan SPN’leri bulmak için “Microsoft Kerberos Configuration Manager for SQL Server” uygulamasını indirip kurduktan sonra size eksik olan SPN kayıtlarını gösterecektir. Exe’ye aşağıdan ulaşabilirsiniz.

https://www.microsoft.com/en-us/download/details.aspx?id=39046

 

Exe’nin kurulumunu gerçekleştirdikten sonra aşağıdaki path’e dosyalar gelecektir.

C:\Program Files\Microsoft\Kerberos Configuration Manager for SQL Server

Görsel – 3

İlgili sunucuda KerberosConfigMgr.exe dosyasını yönetici olarak çalıştırdıktan sonra, Connect sekmesine tıklayıp, ServerName kısmına (.) koyduktan sonra Connect diyoruz.

Kerberos uygulaması bize eksik olanları listeleyecektir. AD katmanında yönetici tarafından error olarak gelen sonuçlar fixlenerek SPN kayıtları güncellenir.

Görsel – 4

Görsel  – 5

Görsel – 6

 

1-) SPN Kayıtlarını kontrol etmek için;

Kullanici ve Bilgisayar Adına Göre SPN kaydı Listelemek için;

 

setspn -L <Kullanici>

setspn -L <ServerName>

 

SPN kaydını eklemek için;

 

SetSPN -s "MSSQLSvc/server.domain.com:port" "domain\serviceuser"

or

SetSPN -s "MSSQLSvc/ server.domain.com:InstanceName" "domain\serviceuser"

 

SPN kaydını silmek için;

 

SetSPN -d "MSSQLSvc/ server.domain.com:port" "domain\serviceuser"

 

Dublicate SPN kaydını bulmak için;

setspn -F -X

 

 

Benzer Yazılar

SQL SERVER RIGHT-LEFT PARTITION

SQL Server 5 gün önce

SQL Server’da partitioning, büyük veritabanı tablolarını daha yönetilebilir ve performanslı hale getirmek amacıyla kullanılan bir tekniktir. Bu teknik, tablonun verilerini fiziksel olarak değil, mantıksal olarak parçalara ayırır. Veriler, belirli bir partition function ve partition scheme kullanılarak farklı bölümlere yönlendirilir. Partitioning, özellikle büyük veri kümeleriyle çalışan veri tabanlarında sorgu performansını artırır ve veri yönetimini kolaylaştırır. Partition Function ve Partition Scheme nedir? Partition Function: Verilerin hangi kriterlere göre bölüneceğini belirler. Örneğin, bir tarih aralığına göre verileri ayırmak. Partition Scheme: Verilerin hangi filegroup’larda depolanacağını belirler.   Örnek olarak Range LEFT ve Range RIGHT olmak üzere iki ayrı tabloda partition nasıl yapılır sizlere göstereceğim. İlk olarak Range LEFT olan partition yapısından başlayacağım. Öncelikle Veri tabanıma yeni filegroup ve file ekliyorum Şimdi sıra FUNCTION ve SCHEME oluşturmakta ben tablomu yıllık olarak partition yaptım sizler ihtiyaçlarınız doğrultusunda aylık,günlük vs yapabilirsiniz. LEFT partition dediğimiz olay vermiş olduğunuz tarih aralığına eşit bir veri geldiğinde bu veriyi solundaki partition […]

Veritabanı Recovery Pending Durumu ve Düzeltme Seçenekleri

SQL Server 2 hafta önce

İçindekilerVeritabanı Recovery Pending Durumu Nedir?Veritabanı Neden Recover Pending Duruma Düşer?Recovery Pending Durumu Nasıl Çözülür?SonuçKaynaklarVeritabanı Recovery Pending Durumu Nedir? SQL Server’da veritabanları bazı nedenlere bağlı olarak “Recovery Pending” (Kurtarma Bekleme)  moduna geçebilir. Veritabanın düzgün bir şekilde kapatılmaması, eksik veya bozuk log dosyaları, disk depolama sorunları, sistemde yaşanan anormal şekilde çökmeler veya MS SQL Server’daki hatalar bu duruma sebep olabilir. Recovery durumu, aslında veritabanını tekrar kullanılabilir hale getirmek için bir kurtarma işlemi yürüttüğünü ifade eder ve üç aşamadan oluşur; Analysis (Analiz): Transaction log incelemesi yapılması ve işlemlerin tamamlanma (Commit) durumunun kontrol edilmesi, Redo (Yeniden İşleme): Tamamlanmış (Commit) ancak henüz diske yazılamamış olan işlemlerin yeniden işlenmesi, Undo (Geri Alma): Başlamış (Begin) ancak tamamlanmamış (Commit) işlemlerin  geri alınmasıdır.   Veritabanı Neden Recover Pending Duruma Düşer? SQL Server Restart Süreci SQL Server servisi restart edildiğinde üzerinde bulunan tüm veritabanları tutarlılığın sağlanması için otomatik olarak recovery moduna girer ve redo/undo işlemleri sürecince devam eder. Ani Sistem […]

SQL Server DMV ve DMF – 6

SQL Server 2 hafta önce

Bu yazımızda DMV ve DMF Serimizin 6.sına devam edeceğiz. Bir önceki seride Memory’ye ilişkin DMV ve DMF’leri ele almıştık. Bu yazıda Memory konusunda devam edeceğiz. SQL server’da Memory kavramı en önemli kavramlardan biridir. Özellikle tüm transaction işlemlerinin önce Buffer sonra disk üzerinden devam ettiğini düşünürsek buffer’ın oynadığı kritik rolü daha iyi anlayabiliriz. Bu yazıda Memory’nin durumunu ve monitör edilmesine bakacağız. Özellikle Performans sorunlarında memory konusunda sorun yaşandığı durumda nasıl okumak gerektiği önemli rol oynamaktadır. Hangi database’de, hangi tablo’da sorun yaşandığına ilişkin bilgilere bu paylaşım sonrasında görebileceğiz. SQL Server’ın Memory kullanım durumunu incelediğimde; select physical_memory_in_use_kb/1048576.0 AS ‘physical_memory_in_use (GB)’, locked_page_allocations_kb/1048576.0 AS ‘locked_page_allocations (GB)’, virtual_address_space_committed_kb/1048576.0 AS ‘virtual_address_space_committed (GB)’, available_commit_limit_kb/1048576.0 AS ‘available_commit_limit (GB)’, page_fault_count as ‘page_fault_count’ from  sys.dm_os_process_memory; Görsel – 1   Physical_memory_in_use: Kullanımda olan Fiziksel Memory miktarını gösterir. locked_page_allocations: Memory’de lock’lanmış olan Page’lerin miktarını belirtir. virtual_address_space_contained: SQL Server VAS(Virtual Adress Space) için ayrılan miktarı belirtir. available_commit_limit: SQL Server tarafından kullanılabilecek Memory Miktarını gösterir. […]

0 Yorum

Yorum Yaz

Rastgele