Einer der Benutzernamen wurde legal geändert, daher haben wir den Active Directory-Benutzernamen entsprechend geändert - von Domäne \ alter Name zu Domäne \ neuer Name. Wenn suser_sname () von diesem Benutzer in einer gespeicherten Prozedur aufgerufen wird, wird der alte Name zurückgegeben, nicht der neue.
Das Googeln führte mich zu KB 946358, was darauf hindeutet, dass ihr Name auf dem Server zwischengespeichert und nicht aktualisiert wird, vermutlich weil suser_name () LsaLookupSids aufruft. Die Problemumgehung in diesem Artikel umfasst jedoch einen Neustart des Servers, und selbst wenn dies der Fall wäre, möchte ich das Problem dennoch verstehen.
Wenn ich meinen Kontext in ihren ändere, kommt der richtige Name zurück:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
... Ich hätte angenommen, dass dies auch LsaLookupSids aufruft und so den falschen Namen zurückgibt. Es ist wahrscheinlich, dass ich die Mechanismen, die hier wirken, nicht wirklich verstehe.
Einige wichtige Beobachtungen:
Dieser Benutzer hat keine explizite Anmeldung auf dem Server. Aber sie sind Mitglied einer AD-Gruppe, die dies tut. Der geänderte Name (Domäne \ neuer Name) wird in der Ergebnismenge für angezeigt
exec xp_logininfo 'domain\ADGroupName', 'members'
. Domain \ alter Name nicht.Der Benutzer ruft suser_name () innerhalb einer gespeicherten Prozedur auf, die von einer Passthrough-Abfrage in einer Access 2003-MDB aufgerufen wird.
Wir haben in der Vergangenheit viele Kontonamen von Benutzern geändert, dieses Problem jedoch erst in der letzten Woche beobachtet (zwei Änderungen wurden in der letzten Woche vorgenommen, beide scheinen das Problem aufzuweisen).
Auf dem Server wird SQL Server 2008 SP3 x64 unter Windows 2008 R2 Datacenter Edition ausgeführt.
Was ist los? Was könnte ich als DBA tun oder wo könnte ich suchen, um dies zu lösen?
SUSER_SNAME()
, es sollte an diesem Punkt behoben sein. Sie können dann versuchen, das Login zu löschen und festzustellen, ob der neue Name erhalten bleibt.
ipconfig /flushdns
und ipconfig /registerdns
von einer Befehlszeile , wenn dass aufräumt das Problem zu sehen.
EXECUTE AS
undSELECT SUSER_NAME()
testen Sie es. Haben Sie auchSUSER_SNAME()
eine der anderen 100 Variationen ausprobiert ?