我经常听到类似"我们能否使用LDAP来加载员工信息吗?"的问题。然而,"轻量级目录访问协议"这个标题让我认为它只是一个协议,而不是像Oracle或MSSQL这样的物理数据库管理系统。
那么有没有人能够向我解释一下LDAP是什么,它如何使用,以及它的基本工作原理是什么?LDAP仅仅是从各种数据库管理系统中提取数据的标准协议吗?在架构图中,LDAP是否只是在DB和应用服务器之间画的一个箭头?
LDAP是一种用于查询用户目录的协议。例如,Active Directory或Novell eDirectory都支持LDAP。它也在一定程度上是一种语法,用于执行此类查询,就像SQL是用于查询数据库的查询语言。
一个LDAP命令可能如下所示
(givenName=Mike)
它会返回目录中所有名字为Mike的条目。
LDAP通常用作认证数据库。比方说你有一个CMS产品,你作为软件即服务出售。用户获得CMS之后,你会对其进行维护等。
因此,你将它安装在examplecustomer1.com、examplecustomer2.org和examplecustomer3.net上(每个域名一个软件)。现在你需要维护三个用户数据库。所以你将自己添加到所有系统中作为管理员,并添加客户账户。
然后你发现了LDAP。你为你的产品添加了LDAP支持,现在你有了一个中央用户数据库。你可以使用自己的用户名和密码登录所有系统作为管理员。CMS系统仍然包含用户数据库和每个用户的权限,但是现在用户名用作LDAP数据库的引用,CMS数据库模式中的密码字段被删除。
是的,LDAP(轻量级目录访问协议)是在TCP/IP上运行的协议。
它用于访问目录服务,如Microsoft的Active Directory或Sun ONE Directory Server。
目录服务是一种数据库或数据存储,但不一定是关系数据库。其结构通常要简单得多,存储名称-值对的分层集合,例如lastName=Smith,firstName=John。
LDAP是一种协议,但我认识的许多人喜欢将其含义扩展为“任何能够响应LDAP查询的存储”。Active Directory是这样的一个存储,还有许多其他的。当架构师们无法确定存储时会使用它。这就像在不知道是MySql、Oracle还是SQL Server时说“将其存储在SQL中”一样。
LDAP是什么:
LDAP全称为轻型目录访问协议(Lightweight Directory Access Protocol),是一种通信协议,微软实现了该协议用于活动目录服务和其他NTDS.DIT文件。让我们先澄清混淆的地方。NTDS.DIT包含活动目录数据库。要访问数据库,需要使用通信协议LDAP。就是这样。因此,NTDS.DIT是一个简单的数据库,即ADDS数据库(Active Director Directory Services)。我们如何访问它?
我们使用LDAP来访问。
让我们举个LDAP快速示例。
C:/users/data.doc
或者
LDAP语法
CN=Bob,OU=Users,DC=Youtube,DC=Com
CN = 规范名称(对象或名称)
OU = 组织单位(活动目录中的文件夹)
DC = 域控制器(位置在哪里)
其他信息:活动目录是基于X.500标准的数据库,其中包含所有AD对象,即NTDS.DIT文件。
1. Query which is used to fetch information from a directory. Include operations like search and compare.
2. Update which is used to update the information stored in the directory. Include operations like add, modify and delete.
3. Authentication which is used to connect and disconnect with a server, create access rights and preserve information. Include operations like bind, unbind and abandon.
In LDAP, the security model relies on the bind operation. Three different bind operations are possible according to the security mechanisms applied. They are:
无身份验证
最简单的方法,只有在数据安全不是问题且没有访问控制权限时才能使用。例如,目录包括可以被任何人浏览的地址簿。如果用户在绑定API调用期间将DN和密码字段留空,则服务器将自动采用匿名用户会话,并授予相应的访问控制。
基本身份验证
基本身份验证是LDAP中使用的替代简单安全机制,也适用于其他几种面向Web的协议,如HTTP。在这种方法中,客户端必须通过输入以明文传输的密码和DN来向LDAP服务器进行身份验证。另一方面,服务器将DN和密码与目录中的条目进行比较。如果密码匹配,则授予访问权限。此外,明文格式的密码不能保证机密性,因此可能导致密码泄露给未经授权的人员。
SASL(简单身份验证和安全层)
该框架已添加到LDAP V3中,为连接导向的协议添加了附加的身份验证方法。该机制指定了一种挑战-响应协议,其中客户端和服务器交换某些数据以确保身份验证并建立后续通信将进行的安全层。使用SASL,LDAP协议可以支持LDAP客户端和LDAP服务器所批准的任何身份验证类型。
LDAP基本上是一种访问目录的协议。这里的目录基本上是指具有组织中用户信息的目录。目录的示例包括Microsoft的Active Directory(AD)和Oracle的Internet Directory(OID)。目录基本上用于通过集中用户身份验证和授权来实现组织的单一登录功能。有关更多详细信息,请参阅以下链接:
是的,LDAP本身通常需要较低级别的数据库存储。我建议您在此处亲自动手:
如果您只安装OpenLDAP并进行尝试... http://www.openldap.org/doc/admin22/install.html
... 您将不得不考虑依赖关系。
其中之一,在这种情况下,是SleepyCat。
玩得开心。
更有趣的是,这里有一个很好的关于分类法的哲学讨论: http://archive.oreilly.com/pub/post/ldap_is_not_a_database.html