MIM 2016 SSPR Türkçe Karakter Problemi
Samet Kara
Merhaba,
Bugün bir müşterimizde karşılaştığım ilginç bir hatayı ve bu hatayı çözmek için izlediğim yolu sizlerle paylaşmak istiyorum.
Bazı kullanıcılar Kendi Kendine Parola Sıfırlama Portalinde kullanıcı adlarını yazdıklarında aşağıdaki gibi bir hata ile karşılaşıyorlardı.
Günlük kayıtlarını incelediğimizde aşağıdaki gibi sonuçlarla karşılaştık.
Hatayı daha iyi inceleyebilmek için aşağıda vurguladığım fonksiyona erişmeye çalıştım.
Bunun için JetBrains'in DotPeek uygulamasını kullandım. Bu uygulama ile MIM Service kurulumunda bulunan tüm Dll ve exe dosyalarını açtım.
Microsoft.ResourceManagementWebServices.ResourceManagementService.GetUser(string nt4Name) fonksiyonunu buldum.
Bu fonksiyon DataAccess sınıfından GetUserFromName(nt4Name) fonksiyonunun çağırıldığını gördüm. İlgili sınıfı incelediğimde GetUserFromName(string name) fonksiyonunun kendisine iletilen name değerini ""karakterine göre ayırdığını ve elde ettiği iki değeri yine aynı sınıfta yer alan GetUserFromName(string domainName, string userName) fonksiyonunu çağırdığını, bu fonksiyonunda yine aynı sınıfta yer alan GetUser(string domainName, string userName) fonksiyonunu çağırdığını gördüm.
Son olarak GetUser(string domainName, string userName) fonksiyonunun "GetUserFromName" isimli stored procedure'ı çağırdığını gördüm.
İlgili stored procedure'ı aşağıda sizlerle paylaştım.
Bu stored procedure [fim].[ObjectValueString] tablosunda @Name kullanıcı adına ve @DomainName domain adına sahip nesne için ObjectKey değerini bulup daha sonra bu değeri kullanarak [fim].[GetIdentifierFromObjectKey] stored procedure ile ilgili hesaba ait identifier değerini bulmaktadır.
Bu stored procedure ile testleri yaptığımda herhangi bir problem göremedim. İlgili kullanıcının da bu stored procedure kullanılarak identifier bulunabildiğini gördüm. Bu nedenle araştırmama SQL Trace başlatarak incelememe devam ettim. Trace başlattıktan sonra tekrar SSPR üzerinden aynı kullanıcı ile test yaptım.
Trace sonucunu incelediğimde kullanıcı adını büyük harflerle ya da küçük harflerle yazmamızdan yada başına netbiosname değerini yazmamızdan bağımsız olarak çalıştırılan sql komutunda kullanıcı adının küçük "ı" karakteriyle geldiğini gördüm.
Aynı sql cümleciğini çalıştırdığımda kullanıcı için identifier değerinin bulunamadığını gördüm. Ancak sorguda küçük 'ı' karakterlerini 'i' ile değiştirdiğimde kullanıcı için identifier değerinin bulunabildiğini gördüm.
Bunun üzerine GetUserFromName stored procedure a kullanıcı adında bulunan küçük 'ı' karakterini 'i' ile değiştirecek bir satır ekledim. Stored procedure'ın son halini aşağıda paylaşıyorum.
Bu değişiklikten sonra ilk sorguyu tekrar çalıştırdığımda identifier değerinin bulunabildiğini gördüm.
Daha sonra tekrar kullanıcının parolasını değiştirmeyi denediğimizde başarılı olduğunu gördük.
Last updated