【问题标题】:'Access Denied' when attempting DirSync with S.DS尝试使用 S.DS 进行 DirSync 时出现“拒绝访问”
【发布时间】:2015-01-15 21:09:30
【问题描述】:

我正在尝试设置DirSync control。以前我 [成功] 使用了 System.DirectoryServices.Protocols 中的方法,但我发现它返回的结果只是部分对象 - 即使我定义了它,我也无法让它从用户那里返回 homeDrive 属性它在 SearchRequest 的 Attributes 属性中。

因此,我尝试使用 System.DirectoryServices 在 some of the documentationexamples 之后设置 DirSync。我成功地连接到了我的测试服务器(只能通过 IP 访问),并且我成功地仅定位了一个 OU 并搜索了一个用户,如下所示:

byte[] cookie = null;
root = new DirectoryEntry(
  "LDAP://[MyIPHere]/OU=test ou,DC=company,DC=com", "username", "password");

//Section A - Use this section for a regular search
DirectorySearcher src = new DirectorySearcher(root);
src.SearchScope = SearchScope.Subtree;
src.Filter = "(&(objectClass=user)(sAMAccountName=myuserhere)";

//Section B - Use this section for a DirSync
//src.DirectorySynchronization = new DirectorySynchronization(
    DirectorySynchronizationOptions.IncrementalValues, cookie);
//src.Filter = "(&(objectCategory=person)(objectClass=user))";

//Execute the code whichever section is used
SearchResultCollection result = src.FindAll();

int count = result.Count;
Console.WriteLine(count.ToString());

foreach (SearchResult res in result)
{
    //do things
}

但是,当我尝试使用 B 部分而不是 A 部分时,我在设置 int count 的那一行出现错误。 (我尝试过不向 src.DirectorySynchronization 的构造函数传递任何参数,如示例中一样,结果相同):

COMException 未处理

访问被拒绝。

我只有在尝试访问结果对象的属性或尝试迭代时才会收到错误消息。如果我在 int count 行上设置断点并查看结果对象,我会在结果的 Count 的 value 列中看到以下内容:

'result.Count' 抛出类型异常

'System.Runtime.InteropServices.COMException'

我已确保我的帐户对指定的 OU 和整个测试域都具有 Replicating Directory Changes 安全访问权限(以及所有其他可能的安全访问权限)。我也尝试过使用单独的域管理员帐户。

如果我尝试在我们的生产域上运行它,我会遇到同样的问题,在构造 DirectoryEntry 对象时不传递任何凭据。

考虑到我可以成功检索到其他搜索结果,这个 DirectorySynchronization 是什么导致了访问问题,为什么当我调用 src.FindAll() 时没有发生?

(我对其他选项持开放态度,但我现在想避免使用 USNChanged 跟踪方法,因为它会返回完整的对象,并且需要额外的编码。)

【问题讨论】:

    标签: c# .net active-directory directoryservices


    【解决方案1】:

    DirSync 搜索的基础必须是目录分区的根,即在您的情况下为“DC=company,DC=com”。

    http://msdn.microsoft.com/en-us/library/ms677626(v=vs.85).aspx
    表中的“搜索基础”。

    DirSync 的一些更好的 C# 示例:

    http://msdn.microsoft.com/en-us/magazine/cc188700.aspx#S1
    请参阅“使用 DirectorySearcher 寻找方式”部分。

    如果您只想跟踪 OU/容器上的更改,是的,您必须使用 USNChange。

    【讨论】:

      猜你喜欢
      • 2011-10-03
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      相关资源
      最近更新 更多