2009-10-29 6 views
19

일부 AD 쿼리 코드를 업데이트해야하며 현재 .NET 3.5 System.DirectoryServices.AccountManagement 개체를 사용하여 LDAP를 사용하는 현재 방식과 달리 관리 방식으로 AD를 쿼리하고 싶습니다. .Active Directory의 NativeGuid와 GUID의 차이점

UserPrincipal.Guid 값을 읽을 때 이상한 문제가 발생했습니다. LDAP를 통해 사용하고있는 Guids와 비슷하지만 다르다는 것을 알 수 있습니다.

은 처음에 그들은 완전히 다른 모습,하지만 두 번째 테이크에, 나는 후반이 동일하다는 것을보고 상반기 단순히 즉 전치됩니다

뉴 (.NET 3.5) 방법 GUID를 : 를-89ab-CDEF-0123-456789abcdef
이전 (LDAP) 방법 GUID : 나는 LDAP 코드를 확인하고 우리가 SearchResult.GetDirectoryEntry를 (사용하고 있던 것을보고

67452301-ab89-efcd-0123-456789abcdef) .NativeGuid 필드를 얻으려면 Old Guid.

SearchResult.GetDirectoryEntry()라는 다른 속성이 있습니다 .Guid는 새로운 .Net 3.5 클래스를 사용하여 검색하는 GUID와 동일합니다.

내 질문은, 왜 그것들이 (다른 종류의) 다른 것이며 어떤 것을 사용해야합니까?

답변

22

예상했듯이 두 값은 동일한 값을 나타냅니다. 차이점은 서식에 있습니다. DirectoryEntry.NativeGUID은 리틀 엔디안 순서 (대시 없음)로 표시되며, 이는 디렉토리 서비스에서 "기본으로"저장되는 방식이며 UserPricipal.GUID/DirectoryEntry.GUID은 대문자 순서 (대시)로 표시됩니다. 자세한 내용은 위키 피 디아 문서 Endianess을 참조하십시오.

NativeGUID (문자열)의 값을 인쇄 할 때 문자열을 입력 (Guid ng = new Guid(de.NativeGuid);)으로 사용하여 새 GUID를 만들지 않는 한 대시가 표시되지 않아야합니다 (예와 같이). 그러면 혼란이 생길 ​​것입니다 ...

GUID를 외부 데이터 소스에 저장하거나 NativeGUID를 빅 엔디안 GUID로 저장할 때 두 가지를 섞어서는 안됩니다.

UserPricipal.GUID/DirectoryEntry.GUID는 objectGUID 특성이 Active Directory 사용자 및 컴퓨터와 ADSI 편집과 같은 대부분의 Windows 관리 도구를 사용하여 표시되는 방식이고 저장 및 표시되는 방식이므로 uniqueidentifier 데이터 형식을 사용할 때 SQL Server 또한; UserPrincipal (GetUnderlyingObject()) 아래로 이동하여 NativeGUID 값을 가져 오거나 UserPrincipal.GUID 속성을 little-endian으로 변환해야합니다.

기존의 "외부"데이터를 GUID 형식으로 마이그레이션할지 또는 NativeGUID 형식을 계속 사용할지 결정해야합니다. 지금 당장 당신이 어딘가에 있다고 생각합니다.

+0

고맙습니다! 그것은 큰 도움이되었습니다. –

관련 문제