1

我对使用 .net 框架的基于 ldap 的目录服务编程非常陌生;因此有一个基本的愚蠢问题。

我想使用 System.DirectoryServices.Protocol 找出特定用户所属的所有子树。

首先,一个用户可以是“一个”目录服务实例中多个子树的一部分吗?如果是,那么如何使用“System.DirectoryServices.Protocol”命名空间找到特定用户所属的所有子树?

如果一个用户“只”属于一个特定的子树,那么我想我可以从用户的 DN 中找到子树的所有 DN。请让我知道是否有其他有效的方法?

更新:

具体来说我的问题,鉴于这是我的用户对象的 DN - “uid=DaffyD,OU=Ducks,OU=People,O=A”,它是否可以直接或间接存在于其他 OU 中?例如,“OU=Ducks”可以是除“People”之外的任何其他 OU 的一部分吗?

然后我的下一个问题,如果不对用户的 DN 进行某种字符串操作,我能否以某种方式找到该用户有效使用 System.DirectoryService.Protocol 的父节点的 DN 名称?

4

2 回答 2

3

我不确定用户“属于”子树是什么意思。用户对象将存在于目录中的单个路径中,其 DN 会告诉您该路径是什么(实际上,反之亦然:您知道 DN,然后找到该对象)。这是 DN == 专有名称的全部意义:唯一地命名对象。

当然,一个用户可以属于多个组(作为 Active Directory 的一个特性);这些组分布在目录中。不确定您在使用“属于”一词时是否也提到了群体。

编辑:由于任何类型的用户对象只能有一个父 OU,同样,每个 OU 只能有一个父容器(通常是 O 或 OU)。整个目录形成一棵树,任何节点都不能有两个父节点。

该框架仅将 DN 作为字符串处理。但是,有可用的第三方DN 解析器库

于 2009-08-13T07:57:12.953 回答
3

这完全基于我对 Active Directory 的经验——但我假设其他 LDAP 目录会以类似方式处理它:

不,一个用户只存在一次,因此只能位于一个容器中(通常是一个组织单元)。据我所知,用户没有“符号链接”的概念。

为什么你真的希望用户存在于多个地方?

如果您希望用户成为多个子树的一部分以处理权限,那么您做错了 - 您不应该根据您的决定是否允许某个用户在 LDAP 中的“位置”上执行给定操作层次结构,而是关于组成员身份。

LDAP 组是用来处理权限的,用户可以是任意数量的组的成员——你有你的 1:n 关系——用户可以是组的成员,这些组负责处理权限。

马克

于 2009-08-13T08:05:45.450 回答