我编写了各种连接到LDAP服务器并运行查询的代码,但对我来说,这一直是巫毒。有一件事我并不真正理解,那就是绑定DN的概念。下面是一个使用openldap提供的ldapsearch
命令行工具的示例。(忽略缺乏身份验证。)
ldapsearch -h 1.2.3.4 -D dc=example,dc=com [query]
-D dc=example,dc=com
部分的目的和功能是什么?为什么我们需要绑定到目录层次结构中的特定位置?是否要确定我的查询应该应用于目录的哪一部分?例如,如果目录的根节点是dc=com
,并且它有两个子节点(dc=foo
和dc=bar
),也许我希望我的查询针对的是dc=foo,dc=com
子树,而不是dc=bar,dc=com
子树?
发布于 2014-07-30 18:48:23
绑定DN是绑定到LDAP中的一个对象,它为您提供了执行任何您想要做的事情的权限。一些(很多?)LDAP实例不允许匿名绑定,或者不允许使用匿名绑定执行某些操作,因此必须指定一个bindDN来获得执行该操作的身份。
以一种类似的非技术方式--没错,这是一种延伸--一家银行将允许你走进银行,在不给他们任何身份的情况下查看他们的利率,但为了开户或提款,你必须拥有他们知道的身份--这个身份就是bindDN。
发布于 2014-07-30 20:50:59
不要混淆baseDN和bindDN。
换句话说,当您指定一个bindDN时,您将使用该对象安全访问来遍历LDAP树。
现在,字符串dc=example,dc=com
不是bindDN的最佳示例,因为它是LDAP树的“域”。dc表示域组件,每个LDAP树都用字符串( dc=string、dc=string、.但是这些字符串并不像树的其他部分那样是一条“路径”。
有效的例子有:
dc=example,dc=com
dc=mydomain
dc=avery,dc=long,dc=list,dc=of,dc=domains
但是,这些根本要素是不可分割的。虽然它们看起来可能是几个元素,它们表示一条路径,就像树的其他部分一样,但它们不是。(因此,对于这些元素,逗号",“不是元素分隔符。)
因此,对于dc=avery,dc=long,dc=list,dc=of,dc=domains
示例,这意味着这是整个元素名。它不是一条元素之路。它不能分解为子元素:没有对象dc=of,dc=domains
。
想象一下将您的C:
驱动器命名为D:\my\folder\
。其中的每一条路径看起来都类似于D:\my\folder\my\real\path
,因为真正的文件路径将是\my\ real \path,对吗?好吧,这就是LDAP的基础(根)的样子,它有一组dc=元素。
相关链接: Oracle文档:“ldapsearch工具”http://docs.oracle.com/cd/E19199-01/816-6400-10/lsearch.html
没有标准要求LDAP DITs的任何特定结构,因此目录服务器可以在任何层次结构中保存条目。然而,也有一些共同的惯例。例如,... ,如果组织有一个example.com域,那么命名上下文可能类似于dc=example,dc=com。命名上下文包含多个组件是完全合法的,因此,仅仅因为服务器有一个DN为dc=example的条目,dc=com就不一定需要有一个DN为dc=com的条目。
https://serverfault.com/questions/616698
复制相似问题