L'un des noms de nos utilisateurs a été légalement modifié, nous avons donc changé leur nom d'utilisateur Active Directory pour qu'il corresponde - de domaine \ ancien nom à domaine \ nouveau nom. Cependant, lorsque suser_sname () est appelé par cet utilisateur dans une procédure stockée, il renvoie l'ancien nom, pas le nouveau.
La recherche sur Google m'a conduit à KB 946358 qui suggère que leur nom est mis en cache sur le serveur et non mis à jour, probablement parce que suser_name () appelle LsaLookupSids. Cependant, la solution de contournement dans cet article implique le redémarrage du serveur, et même si c'était le cas, j'aimerais toujours comprendre le problème.
Si je change mon contexte pour le leur, le nom correct revient:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
... J'aurais supposé que cela appellerait également LsaLookupSids, et retournerait donc le nom incorrect. Il semble probable que je ne comprenne pas vraiment les mécanismes à l'œuvre ici.
Quelques observations qui peuvent être importantes:
Cet utilisateur n'a pas de connexion explicite sur le serveur. Mais ils sont membres d'un groupe AD qui le fait. Le nom modifié (domaine \ nouveau nom) apparaît dans le jeu de résultats pour
exec xp_logininfo 'domain\ADGroupName', 'members'
; le domaine \ oldname ne fonctionne pas.L'utilisateur appelle suser_name () à partir d'une procédure stockée, appelée à partir d'une requête passthrough dans une MDB Access 2003.
Nous avons changé de nombreux noms de comptes d'utilisateurs dans le passé, mais nous n'avons observé ce problème que la semaine dernière (deux modifications ont été apportées la semaine dernière, les deux semblent présenter le problème).
Le serveur exécute Sql Server 2008 SP3 x64 sur l'édition Windows 2008 R2 Datacenter.
Que se passe-t-il? En tant que DBA, que puis-je faire ou où puis-je chercher à résoudre ce problème?
SUSER_SNAME()
, il devrait être fixé à ce point. Vous pouvez ensuite essayer de supprimer la connexion et voir si elle conserve le nouveau nom.
ipconfig /flushdns
et à ipconfig /registerdns
partir d'une ligne de commande pour voir si cela résout le problème.
EXECUTE AS
etSELECT SUSER_NAME()
testez. Aussi, avez-vous essayéSUSER_SNAME()
et l'une des 100 autres variantes?