Um dos nomes de nossos usuários foi legalmente alterado, portanto, alteramos o nome de usuário do Active Directory para corresponder - de domínio \ nome antigo para domínio \ nome novo. No entanto, quando suser_sname () é chamado por esse usuário em um procedimento armazenado, ele retorna o nome antigo, não o novo.
A pesquisa no Google me levou ao KB 946358, o que sugere que o nome deles está sendo armazenado em cache no servidor e não atualizado, provavelmente porque suser_name () está chamando LsaLookupSids. No entanto, a solução alternativa nesse artigo envolve a reinicialização do servidor e, mesmo que fosse, eu ainda gostaria de entender o problema.
Se eu mudar meu contexto para o deles, o nome correto voltará:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
... Eu teria assumido que isso também chamaria LsaLookupSids e, portanto, retornaria o nome incorreto. Parece provável que eu realmente não entenda os mecanismos em funcionamento aqui.
Algumas observações que podem ser importantes:
Este usuário não possui um login explícito no servidor. Mas eles são membros de um grupo do AD que faz isso. O nome alterado (domínio \ novo nome) aparece no conjunto de resultados para
exec xp_logininfo 'domain\ADGroupName', 'members'
; domínio \ nome antigo não.O usuário está chamando suser_name () de dentro de um procedimento armazenado, chamado de uma consulta de passagem em um MDB do Access 2003.
Alteramos muitos nomes de contas de usuários no passado, mas só observamos esse problema na última semana (duas alterações foram feitas na semana passada, ambas parecem exibir o problema).
O servidor está executando o Sql Server 2008 SP3 x64 no Windows 2008 R2 Datacenter edition.
O que está acontecendo? Como DBA, o que devo fazer ou onde devo procurar para resolver isso?
SUSER_SNAME()
, ele deve ser corrigido nesse ponto. Você pode tentar largar o login e ver se ele mantém o novo nome.
ipconfig /flushdns
e ipconfig /registerdns
de uma linha de comando para ver se isso resolve o problema.
EXECUTE AS
eSELECT SUSER_NAME()
teste. Além disso, você já tentouSUSER_SNAME()
alguma das outras 100 variações?