Uno dei nomi dei nostri utenti è stato modificato legalmente, quindi abbiamo modificato il loro nome utente di Active Directory in modo che corrisponda, da dominio \ vecchio a dominio \ nuovo. Tuttavia, quando suser_sname () viene chiamato da questo utente in una procedura memorizzata, restituisce il vecchio nome, non quello nuovo.
Google mi ha portato a 946358 KB, il che suggerisce che il loro nome viene memorizzato nella cache sul server e non aggiornato, presumibilmente perché suser_name () sta chiamando LsaLookupSids. Tuttavia, la soluzione alternativa in quell'articolo comporta il riavvio del server e, anche se fosse, mi piacerebbe ancora capire il problema.
Se cambio il mio contesto nel loro, il nome corretto ritorna:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
... Avrei supposto che questo avrebbe anche chiamato LsaLookupSids, e quindi avrebbe restituito il nome errato. Sembra probabile che non capisca davvero i meccanismi al lavoro qui.
Alcune osservazioni che potrebbero interessare:
Questo utente non ha un accesso esplicito sul server. Ma fanno parte di un gruppo AD che lo fa. Il nome modificato (domain \ newname) appare nel set di risultati per
exec xp_logininfo 'domain\ADGroupName', 'members'
; dominio \ vecchio nome no.L'utente sta chiamando suser_name () da una procedura memorizzata, chiamata da una query passthrough in un MDB di Access 2003.
Abbiamo cambiato molti nomi di account degli utenti in passato, ma abbiamo riscontrato questo problema solo nell'ultima settimana (due modifiche sono state apportate nell'ultima settimana, entrambe sembrano mostrare il problema).
Il server esegue Sql Server 2008 SP3 x64 su Windows 2008 R2 Datacenter edition.
Cosa sta succedendo? Come DBA, cosa potrei fare o dove potrei cercare di risolverlo?
SUSER_SNAME()
, dovrebbe essere riparato a quel punto. Puoi quindi provare a eliminare l'accesso e vedere se mantiene il nuovo nome.
ipconfig /flushdns
e ipconfig /registerdns
da una riga di comando per vedere se questo risolve il problema.
EXECUTE AS
eSELECT SUSER_NAME()
testare. Inoltre, hai provatoSUSER_SNAME()
e una delle altre 100 varianti?