suser_name ()이 AD 계정 이름 변경을 반영하지 않는 이유는 무엇입니까?


10

사용자 이름 중 하나가 법적으로 변경되었으므로 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로서, 내가 무엇을 할 수 있거나 어디에서 해결할 수 있습니까?


MSSQLSERVER (또는 인스턴스 이름이 무엇이든) 서비스가 로컬 시스템 또는 실제 로그인으로 로그온되어 있습니까? 조회를 실행하는 계정의 레지스트리에 값이 캐시 될 수 있습니다. 귀하의 경우 귀하는 로그인하여 요청했습니다. 정규 계정을 사용하여 SQL Server를 실행하는 경우 (필요한 경우) "SQL Server"로그인으로 SQL Server에 로그온 한 다음 사용자를 실행 EXECUTE AS하고 SELECT SUSER_NAME()테스트 한다고 생각합니다 . 또한 SUSER_SNAME()다른 100 가지 변형 을 시도해 보셨습니까?
Solomon Rutzky

새 이름을 사용하여 인스턴스에서 로그인을 작성하십시오. 이것은 그들의 권한에 영향을 미치지 않습니다. Run SUSER_SNAME(), 그 시점에서 수정해야합니다. 그런 다음 로그인을 삭제하고 새 이름을 유지하는지 확인할 수 있습니다.
Kenneth Fisher

@srutzky 도메인 계정으로 실행되는 기본 MSSQLSERVER 인스턴스입니다. 불행히도 나는 그것에 로그인 할 수있는 암호가 없습니다. 아직 사용자로 suser_sname ()을 시도하지 않았으며 인수가 없으면 suser_name ()과 동일하다고 생각합니다. 시도해 볼 가치가 있습니다-감사합니다!
Warrior Bob

1
SQL Server는 SQL이든 도메인이든 SID로 모든 계정을 일치시킵니다. 도메인 SID는 활성 디렉토리에서 가져 오므로 이름을 변경해도 SID는 변경되지 않습니다. 캐시 된 경우 이전 이름이 반환됩니다. 로그인이 이미 존재하는 경우 SID가 일치하는 한 로그인 이름이 여전히 같은 이름인지 여부에 관계없이 반환됩니다. 데이터베이스 사용자도 마찬가지입니다.
Sean Gallardy

1
당신은 실행 시도 할 수 ipconfig /flushdnsipconfig /registerdns명령 줄에서 경우 그 웁니다 문제까지 볼 수 있습니다.
RLF

답변:


2

이것은 Kerberos 캐싱과 관련이있을 수 있습니까? (추측과 관련이 없을 수도 있습니다) http://blogs.technet.com/b/tspring/archive/2014/06/23/viewing-and-purging-cached-kerberos-tickets.aspx


1
나는 이것이 문제라는 것을 확실히 말할 수는 없지만 이것 또는 이와 비슷한 것을 믿는다. 별도의 이유로 발생한 서버 재부팅은 적어도이 경우에는 서버를 정리 한 것으로 보입니다. 다시 올 것인지는 확실하지 않습니다.
Warrior Bob

그것은 좋은 제안입니다. :-) 캐시 된 kerberos 문제를 해결하기 위해 실제로 수행 한 작업입니다. 당신이 성공해서 다행입니다!
Normoe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.