Имена одного из наших пользователей были юридически изменены, поэтому мы изменили их имя в Active Directory для соответствия - с домена \ старое имя на домен \ новое имя. Однако, когда suser_sname () вызывается этим пользователем в хранимой процедуре, он возвращает старое имя, а не новое.
Поиск в Google привел меня к 946358 КБ, в которых говорится, что их имя кэшируется на сервере и не обновляется, предположительно потому, что suser_name () вызывает LsaLookupSids. Однако обходной путь в этой статье включает перезапуск сервера, и даже если бы это было так, я все равно хотел бы понять проблему.
Если я изменю свой контекст на их, вернётся правильное имя:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
... Я бы предположил, что это также вызовет LsaLookupSids, и поэтому вернет неправильное имя. Кажется вероятным, что я действительно не понимаю механизмы работы здесь.
Некоторые наблюдения, которые могут иметь значение:
У этого пользователя нет явного логина на сервере. Но они являются членом группы AD, которая делает. Измененное имя (домен \ новое имя) появится в наборе результатов для
exec xp_logininfo 'domain\ADGroupName', 'members'
; домен \ старое имя не.Пользователь вызывает suser_name () из хранимой процедуры, вызываемой из сквозного запроса в MDB Access 2003.
В прошлом мы изменили множество имен учетных записей пользователей, но наблюдали эту проблему только на прошлой неделе (две изменения были сделаны на прошлой неделе, обе, похоже, демонстрируют проблему).
Сервер работает под управлением Sql Server 2008 SP3 x64 в выпуске Windows 2008 R2 Datacenter.
Что происходит? Как администратор базы данных, что я могу сделать или где я могу найти решение этой проблемы?
SUSER_SNAME()
, это должно быть исправлено в этой точке. Затем вы можете попробовать сбросить логин и посмотреть, сохранит ли оно новое имя.
ipconfig /flushdns
и ipconfig /registerdns
из командной строки, чтобы посмотреть, решит ли это проблему.
EXECUTE AS
иSELECT SUSER_NAME()
протестируйте. Кроме того, вы пробовалиSUSER_SNAME()
и любые другие 100 вариантов?