'Access Denied' 尝试与 S.DS 进行 DirSync 时
'Access Denied' when attempting DirSync with S.DS
我正在尝试设置 DirSync control。以前我[成功]使用了System.DirectoryServices.Protocols中的方法,但我发现它returned的结果只是部分对象——我无法得到它return来自用户的 homeDrive 属性,即使我在 SearchRequest 的属性 属性.
中定义了它
因此,我尝试使用 System.DirectoryServices 在 some of the documentation and examples 之后设置 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 was unhandled
Access is denied.
我只在尝试访问结果对象的属性或尝试迭代时收到错误。如果我在 int count 行上设置断点并查看结果对象,我会在结果的 Count 的值列中看到以下内容:
'result.Count' threw an exception of type
'System.Runtime.InteropServices.COMException'
我已确保我的帐户对指定的 OU 和整个测试域都具有 Replicating Directory Changes 安全访问权限(以及所有其他可能的安全访问权限)。我也尝试过使用单独的域管理员帐户。
如果我在我们的生产域上尝试 运行,我会遇到同样的问题,在构建 DirectoryEntry
对象时不传递凭据。
考虑到我可以成功检索其他搜索结果,导致访问问题的这个 DirectorySynchronization 是什么,为什么当我调用 src.FindAll()
时没有发生?
(我对其他选项持开放态度,但我现在想避免使用 USNChanged 跟踪方法,因为它 return 返回完整的对象,并且需要在我这边进行额外的编码。)
DirSync 搜索的基础必须是目录分区的根,即在您的情况下 "DC=company,DC=com"。
见http://msdn.microsoft.com/en-us/library/ms677626(v=vs.85).aspx
"Base of the search" 在 table.
DirSync 的一些更好的 C# 示例:
http://msdn.microsoft.com/en-us/magazine/cc188700.aspx#S1
请参阅 "Finding Your Way with DirectorySearcher".
部分
如果您只想跟踪 OU/container 上的更改,是的,您将不得不使用 USNChange。
我正在尝试设置 DirSync control。以前我[成功]使用了System.DirectoryServices.Protocols中的方法,但我发现它returned的结果只是部分对象——我无法得到它return来自用户的 homeDrive 属性,即使我在 SearchRequest 的属性 属性.
中定义了它因此,我尝试使用 System.DirectoryServices 在 some of the documentation and examples 之后设置 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 was unhandled
Access is denied.
我只在尝试访问结果对象的属性或尝试迭代时收到错误。如果我在 int count 行上设置断点并查看结果对象,我会在结果的 Count 的值列中看到以下内容:
'result.Count' threw an exception of type
'System.Runtime.InteropServices.COMException'
我已确保我的帐户对指定的 OU 和整个测试域都具有 Replicating Directory Changes 安全访问权限(以及所有其他可能的安全访问权限)。我也尝试过使用单独的域管理员帐户。
如果我在我们的生产域上尝试 运行,我会遇到同样的问题,在构建 DirectoryEntry
对象时不传递凭据。
考虑到我可以成功检索其他搜索结果,导致访问问题的这个 DirectorySynchronization 是什么,为什么当我调用 src.FindAll()
时没有发生?
(我对其他选项持开放态度,但我现在想避免使用 USNChanged 跟踪方法,因为它 return 返回完整的对象,并且需要在我这边进行额外的编码。)
DirSync 搜索的基础必须是目录分区的根,即在您的情况下 "DC=company,DC=com"。
见http://msdn.microsoft.com/en-us/library/ms677626(v=vs.85).aspx
"Base of the search" 在 table.
DirSync 的一些更好的 C# 示例:
http://msdn.microsoft.com/en-us/magazine/cc188700.aspx#S1
请参阅 "Finding Your Way with DirectorySearcher".
如果您只想跟踪 OU/container 上的更改,是的,您将不得不使用 USNChange。