Suser_name () neden bir AD hesap adı değişikliğini yansıtmıyor?


10

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?


MSSQLSERVER (veya örnek adı ne olursa olsun) hizmeti Yerel Sistem veya gerçek bir Oturum Açma olarak mı oturum açıyor? Değer, aramayı çalıştıran hesabın kayıt defterinde önbelleğe alınmış olabilir. Sizin durumunuzda, giriş yaptınız ve istekte bulundunuz. Ben SQL Server çalıştırmak için normal bir hesap (belki de gerektiği gibi) kullanıyorsanız, sonra belki "SQL Server" giriş olarak SQL Server oturum, sonra çalıştırın EXECUTE ASve SELECT SUSER_NAME()test düşünüyorum. Ayrıca, SUSER_SNAME()diğer 100 varyasyondan birini denediniz mi?
Solomon Rutzky

Yeni adı kullanarak örnekte bir oturum açma oluşturmayı deneyin. Bunun izinleri üzerinde herhangi bir etkisi olmayacaktır. Çalıştır SUSER_SNAME(), o noktada düzeltilmelidir. Ardından, giriş bilgilerini bırakmayı deneyebilir ve yeni adı saklayıp saklamadığını görebilirsiniz.
Kenneth Fisher

@srutzky Bir etki alanı hesabı altında çalışan varsayılan bir MSSQLSERVER örneğidir. Maalesef onunla giriş yapmak için şifrem yok. Ben henüz kullanıcı olarak suser_sname () denemedim, hiçbir argüman verilirse suser_name () ile aynı olduğuna inanıyorum. Yine de denemeye değer - teşekkürler!
Savaşçı Bob

1
SQL Server, SQL veya etki alanı olsun, tüm hesapları SID ile eşleştirir. Etki alanı SID'leri etkin dizinden geldiğinden, adın değiştirilmesi SID'yi değiştirmez. Önbelleğe alınmışsa eski ad döndürülür. Bir oturum açma zaten varsa, SID'ler eşleştiği sürece oturum açma adı, aynı adla aynı adla olmasa da döndürülür. Bu, veritabanı kullanıcıları için aynıdır.
Sean Gallardy

1
Sen yapmayı deneyebilirsiniz ipconfig /flushdnsve ipconfig /registerdnsbir komut satırından eğer temizler sorununa kadar görmek.
RLF

Yanıtlar:


2

Bu Kerberos ile önbellekleme ile ilgili olabilir mi? (alakasız olsa da sadece bir tahmin) http://blogs.technet.com/b/tspring/archive/2014/06/23/viewing-and-purging-cached-kerberos-tickets.aspx


1
Bu sorunun kesin olarak söyleyemem, ama buna ya da buna benzer bir şeye inanıyorum. Sunucunun yeniden başlatılması (ayrı nedenlerden dolayı) en azından bu durumda temizlendi. Tekrar ortaya çıkıp çıkmayacağı belli değil.
Savaşçı Bob

Bu iyi bir öneri, bunu düşünmeliydim! :-) Bu aslında önbelleğe alınan kerberos sorunları temizlemek için daha önce yaptığımız şeydi. Başarılı olmana sevindim!
Normoe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.