Kullanıcılarımızın adlarından biri yasal olarak değiştirildi, bu nedenle Active Directory kullanıcı adlarını etki alanı \ eski adından etki alanı \ yeni adıyla eşleşecek şekilde değiştirdik. Ancak, suser_sname () bu kullanıcı tarafından saklı yordamda çağrıldığında, yeni adı değil eski adı döndürür.
Google beni , muhtemelen suser_name () LsaLookupSids'i çağırdığı için adlarının sunucuda önbelleğe alındığını ve güncellenmediğini öneren KB 946358'e yönlendirdi . Ancak, bu makaledeki geçici çözüm sunucunun yeniden başlatılmasını içerir ve öyle olsa bile yine de sorunu anlamak isterim.
Bağlamımı kendilerine göre değiştirirsem doğru ad geri gelir:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
... bunun da LsaLookupSids'i çağırdığını ve böylece yanlış adı döndüreceğini varsayıyordum. Buradaki iş mekanizmalarını gerçekten anlamıyorum.
Önemli olabilecek bazı gözlemler:
Bu kullanıcının sunucuda açık bir girişi yok. Ancak bunu yapan bir AD grubunun üyeleridir. Değiştirilen ad (domain \ newname) için sonuç kümesinde görünür
exec xp_logininfo 'domain\ADGroupName', 'members'
; domain \ oldname içermiyor.Kullanıcı suser_name () bir Access 2003 MDB'sinde bir düz geçiş sorgusu denilen saklı yordam içinde çağırıyor.
Geçmişte çok sayıda kullanıcının hesap adını değiştirdik, ancak yalnızca geçen hafta bu sorunu gözlemledik (geçen hafta iki değişiklik yapıldı, her ikisi de sorunu sergiliyor gibi görünüyor).
Sunucu, Windows 2008 R2 Datacenter sürümünde Sql Server 2008 SP3 x64 çalıştırıyor.
Neler oluyor? DBA olarak ne yapabilirim veya bunu çözmek için nereye bakabilirim?
SUSER_SNAME()
, o noktada düzeltilmelidir. Ardından, giriş bilgilerini bırakmayı deneyebilir ve yeni adı saklayıp saklamadığını görebilirsiniz.
ipconfig /flushdns
ve ipconfig /registerdns
bir komut satırından eğer temizler sorununa kadar görmek.
EXECUTE AS
veSELECT SUSER_NAME()
test düşünüyorum. Ayrıca,SUSER_SNAME()
diğer 100 varyasyondan birini denediniz mi?