我们使用此代码来查询 ADAM 实例。
DirectoryEntry adRoot = new DirectoryEntry(ConfigurationManager.AppSettings["LdapConnectionString"].ToString());
DirectorySearcher adSearch = new DirectorySearcher(adRoot);
adSearch.Filter = "(&(objectClass=user)(objectCategory=person))";
SearchResultCollection searchResults = adSearch.FindAll();
return searchResults;
这是在 App.config 中的标签中:
添加 key="LdapConnectionString" value="LDAP://服务器名称:端口号/直流=域名“
我们使用代码打印出从 ADAM 实例中检索到的所有属性名称。
DirectoryEntry entry = searchResults[0].GetDirectoryEntry();
foreach (string property in entry.Properties.PropertyNames)
{
Console.WriteLine(property);
}
PropertiesToLoad 是空的 StringCollection,PropertyNamesOnly 为 false。
我们没有检索代理地址、街道、邮编以及程序所需的许多其他属性。
我发现这里那:
如果您未指定属性列表,搜索将返回目录中设置的访问控制允许的所有属性的值。
所以,我的问题是...这个访问控制设置在哪里以及我们如何修改它以便我们可以访问这些属性?
答案1
使用 ADSIEdit,您可能会破坏一些东西,所以要小心。(http://technet.microsoft.com/en-us/library/cc773354%28WS.10%29.aspx))
我从来没有深入研究过,它有点隐蔽。打开 ADSIEdit 并找到要查看的对象(或整个容器/OU),右键单击并转到“属性”。
单击“安全”选项卡,单击“高级”按钮,单击“编辑”查看您可以执行的操作(暂时不要进行任何更改)。您将看到标准权限,例如“完全控制”或“修改所有者”,以及上方适用的“仅限此对象”
您所在的位置还有另一个选项卡“属性”,其中包含所有有用信息。“读取业务角色”和“读取代理地址”等都在那里。
您可以添加一个新组,勾选您喜欢的框,将其应用于整个容器或OU,然后就可以开始了。
答案2
这实际上是两个因素的作用:
运行查询的用户上下文。
正在读取的对象上的 ACE。
我的问题是该查询是在什么用户环境下运行的?
如果我没记错的话,经过身份验证的用户应该有能力读取所有属性。
此外,您应该能够通过控制委派向导以及 ADSIEdit 来实现这一点。
答案3
http://support.microsoft.com/kb/281146
它是 Windows Active Directory 管理单元工具(例如 Active Directory 用户和计算机以及 Active Directory 站点和服务)中“安全”选项卡的命令行等效项。
该语法很有趣,但我已经能够使用 ADAM 命令行提示符成功地拒绝使用 ADAM 沙盒环境的访问:
dsacls“\本地主机\OU =奥纳梅,OU=ou2名称,直流=域名,直流=域名2“/d”域\组:GR
/d 拒绝域\组GR(通用读取)包括许多属性,如代理地址、街道等。我需要让他们授予组 root 成为 GR 成员的权限,或者让我成为另一个用户等。无论哪种方式,我们都解决了。