2009-12-15 6 views
1

Active Directory에 70,000 개 이상의 사용자 계정이있는 그룹이 있습니다. 누군가가 그 그룹의 구성원인지 확인해야합니다. 코드는 동시 사용자가 많은 웹 응용 프로그램에서 실행됩니다. 가능하다면이 앱을 위해 쓰여진 코드의 양을 줄이기 위해 System.DirectoryServices.AccountManagement을 고집하고 싶습니다.DirectoryServices.AccountManagement - 그룹 구성원 확인 효율성

누군가가 멤버인지 여부를 확인 2 일반적인 접근 방법이있을 나타납니다

  1. 사용 UserPrincipal.IsMemberOf() 그룹 구성원의 목록을 얻으려면 회원에게
  2. 사용 UserPrincipal.GetGroups()를 나타내는 부울 값을 얻을 수있는 것을 내가 수동으로 할 수 확인

누군가가 그룹에 있는지 여부를 확인하기 위해 열거하는 70k 사용자를 피하기를 원합니다. 따라서 옵션 2가 액면가에서 더 효율적으로 보입니다. 제가 일하러 갈 때 두 가지 방법 모두에 대해 몇 가지 테스트를 할 수는 있지만 이러한 방법이 실제적으로 무엇을하는지에 대한 정보를 얻고 싶었습니다. 내 사고에서 올바른 방향으로 가고 있는가?

내가 사용중인 라이브러리에 대한 마지막 요점이 하나 있습니다. System.DirectoryServices.AccountManagement가 완전히 중단되고 자체 LDAP 쿼리를 작성하면 성능을 향상시킬 수 있습니까?

답변

1

글쎄, 일을보다 효율적으로 수행하기 위해 고려해야 할 한 가지 사실은 그룹 구성원이 실제로 그 구성원 인 사용자 (및 그룹) 목록이있는 그룹에 의해 관리된다는 사실에 근거합니다. 사용자의 "memberOf"는 실제로 계산 된 "백 링크"입니다. 자세한 내용은 excellent article을 참조하십시오.

하나 또는 두 개의 그룹으로 회원을 확인해야하는 경우 해당 그룹까지 걸어 가서 회원 목록을 요청하고이를 캐시하는 것이 훨씬 쉽습니다. 사용자를 평가할 때 AD를 여러 번 반복하지 않고 DN이 그룹 구성원 목록 중 하나에 나타나는지 확인하면됩니다.

당신은 같은 일을 할 것입니다 :이

GroupPrincipal myGroup = Group.FindByIdentity(context, "myGroupName"); 

var members = myGroup.GetMembers(); 

을, 당신은 그룹 구성원 정보의 캐시에 더 나은 성능 덕분에 얻을 수 있어야합니다. 시도 해봐!

+0

이 방법은 사용자가 원하는 그룹의 구성원 인 그룹의 구성원 인 경우를 처리합니까? – VoteCoffee

+0

"우수 기사"가 옮긴 것 같습니다. 이것은 하나 일 것입니다 : http://tutorials.csharp-online.net/User_Management_with_Active_Directory%E2%80%94Determining_User_Group_Membership_in_Active_Directory_and_ADAM – mwardm