2016-09-19 6 views
0

개발자 입장에서의 저의 역할. 사용자가 공유에 액세스 할 수 있는지 확인하려고하는 응용 프로그램이 있습니다. 응용 프로그램에서 해당 공유에있는 그룹을 확인합니다. 그런 다음 사용자가 속한 모든 그룹을 확인Active Directory - 크로스 도메인

을 한 경우, 사용자가 코드 또는 윈도우 예를 들어 에서 AD 모두에있는 로컬 그룹에 볼 I 수 없습니다 :.

도메인 A를 \ 사용자 1>도메인 A \ 글로벌 그룹> 참조하지 마십시오 나는 도메인 BI에서 볼 때 도메인 B \ 로컬 그룹은

는하지만, 참조 :

공유>도메인 B \ 로컬 그룹>도메인 A \ 글로벌 그룹>도메인 A \ 사용자 1

나는 창문 도구에 표시 해달라고 때문에 제대로 설정되지 않은 일부 보안 설정이 거기에 표시되지 않습니다 또는 코드. 나는 다음과 같은 코드를 시도

업데이트. 나는 여전히 볼 수 없습니다 도메인 B \ 로컬 그룹. 당신이 사용자의 회원이 전체 포리스트의 각 도메인에 하나의 글로벌 카탈로그를 조회 할에 사용자가 속한 모든 그룹을 검색하기 위해

string account = "{User**Or**Group}"; 
string domain = "{Domain}"; 

string dn = ADHelper.GetDistinguishedName(domain, account); 

using (var forest = Forest.GetCurrentForest()) 
{ 
      foreach (Domain domainName in forest.Domains) 
      { 
       Console.WriteLine(string.Format("Domain: {0}", domainName.Name)); 
     Console.WriteLine("========================================================"); 
       GetAllGroups(dn, domainName.Name); 
       domainName.Dispose(); 
      } 
     } 

void GetAllGroups(string dn, string domain) 
{ 

    DirectorySearcher ds = new DirectorySearcher(string.Format("GC://{0}", domain)); 
    ds.Filter = String.Format("(&(distinguishedName={0}))", dn); 

    SearchResult sr = ds.FindOne(); 

    if (sr == null) 
     return; 
    DirectoryEntry Diruser = sr.GetDirectoryEntry(); 
    Diruser.RefreshCache(new string[] { "tokenGroups" }); 

    for (int i = 0; i < Diruser.Properties["tokenGroups"].Count; i++) 
    { 
     SecurityIdentifier sid = new SecurityIdentifier((byte[])Diruser.Properties["tokenGroups"][i], 0); 
     try 
     { 
      NTAccount nt = (NTAccount)sid.Translate(typeof(NTAccount)); 
      Console.WriteLine(nt.Value + "\t" + domain); 
     } 
     catch { } 
    } 

} 

답변

1

(사용자의 tokenGroups 당신에게뿐만 아니라 중첩 된 그룹을 반환 속성), 다음 중복 삭제 여러 떼.

Active Directory는 하나의 쿼리에서 하나의 특성에 대해 5K를 초과하는 값을 반환 할 수 없습니다. 사용자가 10K 개 이상의 그룹에 속하면 AD는 처음 5K 만 반환합니다. 이 경우 멤버쉽을 쿼리하려면 범위 검색이라는 기술을 사용해야합니다.

또한 외부에서 처리해야하는 신뢰할 수있는 도메인이있을 수 있습니다.

다른 해결책은 GetEffectiveRightsFromAcl 함수를 사용하여 지정된 공유에 대한 유효 사용자 권한을 계산하는 것입니다. 솔루션에 대해 설명합니다. here

SE_OBJECT_TYPE.SE_LMSHARE 및 개체 유형을 함수에 전달해야합니다.

+0

감사 Dmitry. 나는 이것을 조사 할 것이다. – H20rider

+0

다른 도메인에서 사용자가 속한 그룹을 찾을 수 없습니다. 어떤 아이디어가 이것을 어떻게? Btw GetEffectiveRightsFromAcl은 사용자가 공유 권한을 얻는 경로를 보여줄 필요가 있기 때문에 작동하지 않습니다 – H20rider

+0

같은 페이지에 있어야 다음 작업을 수행했는지 확인하십시오. 1. 도메인 A에서 GC에 연결하십시오. 2. 도메인 A에서 지정된 사용자에게 바인드하십시오. 3. 토큰 그룹 토큰 속성을 조회하십시오. 4. 도메인 B에서 GC에 연결하십시오. 5.이 GC에서 도메인 A에서 동일한 사용자에게 바인드하십시오. 6.이 GC에서이 사용자에 대한 tokenGroups 속성 쿼리 – oldovets