Ім’я одного з наших користувачів було юридично змінено, тому ми змінили ім’я користувача Active Directory на відповідність - від домену \ oldname до домену \ newname. Однак, коли suser_sname () викликає цей користувач у збереженій процедурі, він повертає стару назву, а не нову.
Гуглінг привів мене до KB 946358, що говорить про те, що їх ім'я кешується на сервері та не оновлюється, імовірно, тому, що suser_name () викликає LsaLookupSids. Однак вирішення цієї статті передбачає перезапуск сервера, і навіть якщо це було б, я все одно хотів би зрозуміти проблему.
Якщо я зміню свій контекст на їхній, повернеться правильна назва:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
... Я би припустив, що це також буде викликати LsaLookupSids, і тому поверне неправильне ім'я. Здається, ймовірно, що я не дуже розумію механізми роботи тут.
Деякі спостереження, які можуть мати значення:
Цей користувач не має явного входу на сервер. Але вони є членом групи AD, яка це робить. Змінене ім'я (домен \ нове ім'я) відображається в наборі результатів для
exec xp_logininfo 'domain\ADGroupName', 'members'
; домен \ oldname не робить.Користувач викликає suser_name () зсередини збереженої процедури, викликаної з прохідного запиту в MDB Access 2003.
Ми багато змінювали імена облікових записів користувачів у минулому, але спостерігали цю проблему лише за останній тиждень (дві зміни були внесені за останній тиждень; обидві, здається, є проблемою).
На сервері працює Sql Server 2008 SP3 x64 у версії Windows 2008 R2 Datacenter.
Що відбувається? Як DBA, що я можу зробити або де я шукаю, щоб вирішити це?
SUSER_SNAME()
, це слід зафіксувати в цій точці. Потім можна спробувати упустити логін і побачити, чи зберігає це нове ім’я.
ipconfig /flushdns
і ipconfig /registerdns
з командного рядка, щоб побачити, чи усуває це проблема.
EXECUTE AS
іSELECT SUSER_NAME()
тестуйте. Також ви спробувалиSUSER_SNAME()
та будь-яку з інших 100 варіацій?