Answers:
在Microsoft“拥抱,扩展和更改” LDAP之前,大多数实现都使用对象来表示树的根。即,您必须从某个地方开始。
由于原因我还不太清楚,在Active Directory中,树/林中的每个域都以dc = domain,dc = com的名称作为根,这实际上不是两个单独的对象,而是它是目录的虚拟根名称空间。
我认为其中某些原因是事实,无论Active Directory怎么说,它仍然是一系列链接的域,每个域都需要被视为独立的实体。
现在,AD树中存在自动传递信任,因此对最终用户的影响较小,但是即使名称空间看起来是连续的,也并非如此。
使用AD的一些命名规则,这一点变得更加明显。例如,sAMAccountName在域中必须是唯一的,无论它们是否在同一容器中。即,完整的专有名称必须是唯一的(在同一容器中不能有两个John Smith用户),但是内部用于许多事物的简称(sAMAccountName)在整个域中必须是唯一的。
其他目录服务也有类似的要求,例如uniqueID应该在整个目录中确实是唯一的,但这更多是因为应用程序通常会做出这样的假设,因为应用程序编写者过于懒惰以致无法处理复杂的问题(我不怪它们,这是一个很难的问题)如何处理两个尝试使用服务的jsmith短名称的用户,但是存在于两个不同的容器中。(即,也许cn = jsmith,ou = London,dc = acme,dc = com和cn = jsmith,ou = Texas,dc = acme,dc = com)。
使用此目录的应用程序应如何决定使用哪个用户?通常的答案是让用户决定。但这意味着抓住这种情况,向用户提供一个UI,供用户选择。
大多数应用程序编写者只是忽略了这种可能性,而只是使用uniqueID或sAMAccountName,因为这是唯一的(某种程度上)并且更容易实现。
uniqueID和sAMAccountName之间的区别在于,uniqueID在整个目录名称空间中应该是唯一的。而sAMAccountName仅在域内保证唯一。如果AD树具有多个域,则域之间没有唯一性保证。
其他人已经解释了为什么使用域名是一个好主意(但不是强制性的)。我只是补充说一个问题是错误的:根本不建议基于计算机名称使用基本后缀(出于明显的原因:如果gandalf.example.com
用sarouman.example.com
?代替,该怎么办)。通常,您仅使用委派域名,如果有example.com
,则使用dc=example,dc=com
。