我们使用这段代码来查询一个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中的标记:
add key =“LdapConnectionString”value =“LDAP:// servername:portnumber / dc = domainname ”
我们使用代码打印出从ADAM实例中检索的所有属性名称。
DirectoryEntry entry = searchResults[0].GetDirectoryEntry(); foreach (string property in entry.Properties.PropertyNames) { Console.WriteLine(property); }
PropertiesToLoad是空的StringCollection,PropertyNamesOnly是false。
我们不检索我们的程序需要的proxyAddresses,street,zipCode和许多其他属性。
我在这里发现:
如果不指定属性列表,则search将返回目录中设置的访问控制所允许的所有属性的值。
所以,我的问题…这个访问控制集在哪里,我们将如何修改它,所以我们可以访问这些属性?
使用ADSIEdit,你可以打破东西,所以要小心。 (http://technet.microsoft.com/en-us/library/cc773354%28WS.10%29.aspx )
我从来没有去过那么深,有一点埋没。 你打开ADSIEdit,find你要查看的对象(或整个容器/ OU),右键单击并转到“属性”。
点击安全选项卡,点击“高级”button,点击“编辑”查看你可以做什么(不要做任何改变)。 您将看到“完全控制”或“修改所有者”之类的标准权限,以及在“仅限此对象”
还有另一个选项卡“属性”,你在哪里 – 所有的好东西。 “阅读业务angular色”和“读取代理地址”等。
你可以添加一个新的组,勾选你喜欢的方框,把它应用到整个容器或OU,你应该很好走。
这实际上是两件事的function:
运行查询的用户上下文。
ACE正在读取的对象上。
我的问题是在什么用户上下文是查询运行?
如果我没有弄错,authentication的用户应该有能力阅读所有的属性。
另外,您应该可以通过“委派控制”向导以及ADSIEdit来实现这一点。
http://support.microsoft.com/kb/281146
它是Windows Active Directorypipe理单元工具(如Active Directory用户和计算机以及Active Directory站点和服务)中安全性选项卡的等效命令行。
这个语法很有趣,但是我已经能够使用ADAM命令行提示符来成功拒绝ADAM在沙箱环境中的访问:
dsacls“\ localhost \ OU = ouname ,OU = ou2name ,DC = domainname ,DC = domainname2 ”/ d domain \ group :GR
/ d拒绝域\组 GR(通用读),其中包括许多属性,如proxyAddresses,街道,等等。 我需要让他们授予组的根是GR的成员或让我另一个用户或东西。 无论哪种方式,我们都知道了。