사용자 이름 중 하나가 법적으로 변경되었으므로 Active Directory 사용자 이름이 domain \ oldname에서 domain \ newname으로 변경되었습니다. 그러나 저장 프로 시저에서이 사용자가 suser_sname ()을 호출하면 새 이름이 아닌 이전 이름을 반환합니다.
인터넷 검색으로 인해 KB 946358 로 이동하여 이름이 서버에 캐시되고 업데이트되지 않습니다. suser_name ()이 LsaLookupSids를 호출하기 때문입니다. 그러나이 기사의 해결 방법은 서버를 다시 시작하는 것과 관련이 있지만 여전히 문제를 이해하고 싶습니다.
컨텍스트를 컨텍스트로 변경하면 올바른 이름이 다시 나타납니다.
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
... 이것도 LsaLookupSids를 호출한다고 가정했을 것이므로 잘못된 이름을 반환합니다. 여기서 작동하는 메커니즘을 실제로 이해하지 못하는 것 같습니다.
중요한 몇 가지 관찰 사항 :
이 사용자는 서버에 명시 적으로 로그인하지 않았습니다. 그러나 이들은 AD 그룹의 구성원입니다. 변경된 이름 (domain \ newname)이
exec xp_logininfo 'domain\ADGroupName', 'members'
; 의 결과 세트에 나타납니다 . domain \ oldname은 그렇지 않습니다.사용자가 Access 2003 MDB의 통과 쿼리에서 호출 된 저장 프로 시저 내에서 suser_name ()을 호출하고 있습니다.
과거에 많은 사용자 계정 이름을 변경했지만 지난 주에만이 문제가 발견되었습니다 (지난 주에 두 번 변경되었으며 모두 문제가있는 것 같습니다).
서버는 Windows 2008 R2 Datacenter 버전에서 Sql Server 2008 SP3 x64를 실행하고 있습니다.
무슨 일이야? DBA로서, 내가 무엇을 할 수 있거나 어디에서 해결할 수 있습니까?
SUSER_SNAME()
, 그 시점에서 수정해야합니다. 그런 다음 로그인을 삭제하고 새 이름을 유지하는지 확인할 수 있습니다.
ipconfig /flushdns
및 ipconfig /registerdns
명령 줄에서 경우 그 웁니다 문제까지 볼 수 있습니다.
EXECUTE AS
하고SELECT SUSER_NAME()
테스트 한다고 생각합니다 . 또한SUSER_SNAME()
다른 100 가지 변형 을 시도해 보셨습니까?