我编写了各种连接到 LDAP 服务器并运行查询的代码,但对我来说一直是巫术。我不太了解的一件事是绑定 DN 的概念。这是一个使用ldapsearch
openldap 提供的命令行工具的示例。(忽略缺少身份验证。)
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
子树?
不要混淆baseDN和bindDN。
搜索的baseDN是起点。它将从哪里开始搜索。很不言自明。
bindDN DN 基本上是您用来针对 LDAP 进行身份验证的凭据。
使用 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 文档:“The ldapsearch Tool” http://docs.oracle.com/cd/E19199-01/816-6400-10/lsearch.html
延伸阅读
绑定 DN 是您在 LDAP 中绑定到的对象,以授予您执行您尝试执行的任何操作的权限。一些(很多?)LDAP 实例不允许匿名绑定,或者不允许使用匿名绑定执行某些操作,因此您必须指定一个 bindDN 以获取执行该操作的标识。
以类似的非技术方式 - 是的,这是一个延伸 - 银行将允许您走进并查看他们的利率而不给他们任何类型的身份证,但是为了开立账户或取款,您有拥有他们知道的身份 - 该身份是 bindDN。