2012-01-31 13 views
3

私は自分の静的クラスをADと連携させようとしています。 私は静的メソッド書いた:私は、リモートの資格情報を持つユーザーを偽装行い、この機能を使用する前にアクティブディレクトリ。 DACLとの連携

public static void AddReadingAceForGroup(DirectoryEntry dirEntry, string groupName) 
    { 
     dirEntry.RefreshCache(); 
     DirectoryEntry root = new DirectoryEntry("LDAP://192.168.1.1/  dc=mydomain,dc=ru"); 
     using (DirectorySearcher ds = new DirectorySearcher(root, "CN="+groupName)) 
     { 
      SearchResult sr = ds.FindOne(); 
      root = sr.GetDirectoryEntry(); 
     } 
     try 
     { 
      ActiveDirectoryAccessRule accessRule = 
       new ActiveDirectoryAccessRule(root.ObjectSecurity.GetGroup(typeof(SecurityIdentifier)), 
               ActiveDirectoryRights.GenericRead, AccessControlType.Allow); 
      dirEntry.ObjectSecurity.AddAccessRule(accessRule); 
      dirEntry.CommitChanges(); 
     } 
     catch(Exception e) 
     { 
     } 
    } 

を、そのコードは、例外なしに動作しますが、何の結果を持っていません。 ACEを削除する同様の機能がうまく動作します。

答えて

0

最終作業コードは次のとおりです。

public static SecurityIdentifier GetGroupSid(string groupName, string domainControllerIp) 
{ 
    SecurityIdentifier sid = null; 
    using (PrincipalContext dcx = new PrincipalContext(ContextType.Domain, domainControllerIp)) 
    { 
     GroupPrincipal group = GroupPrincipal.FindByIdentity(dcx, groupName); 
     if (group != null) 
     { 
      sid = group.Sid; 
      group.Dispose(); 
     } 
    } 
    return sid; 
} 
public static void AddDaclsAceForGroup(DirectoryEntry dirEntry, string groupName, string ip) 
{ 
    SecurityIdentifier sid = GetGroupSid(groupName,ip); 
    try 
    { 
     ActiveDirectoryAccessRule accessRule = 
      new ActiveDirectoryAccessRule(sid,ActiveDirectoryRights.GenericRead, AccessControlType.Allow); 
     dirEntry.ObjectSecurity.AddAccessRule(accessRule); 
     dirEntry.CommitChanges(); 
    } 
    catch(Exception e) 
    { 
    } 
} 

私はちょうどグループSIDとエラーが発生しました。コードは完璧に動作しますが、私が期待しているものではありません。 申し訳ありません私の悪い英語。

関連する問題