将用户数据存储在LDAP而不是RDBMS中的原因

时间:2010-02-18 20:09:31

标签: database ldap

通常说使用LDAP是存储用户数据的好方法。这是因为用户的“目录”是分层的,很少变化。但在我看来,并不排除使用RDBMS。使用LDAP可能是什么原因?我想在LDAP中存储多值字段或添加自定义字段可能更容易,但也可以在数据库中完成(除非你有很多记录)

6 个答案:

答案 0 :(得分:29)

正如已经提到的,互操作性在很大程度上取决于LDAP对某些类型的服务器软件的支持,尽管与LDAP集成的大部分软件都需要特定的模式,因此它不一定像安装和配置LDAP那么简单服务和关闭 - 您可能需要在架构中为要与之交互的每个应用程序添加新元素,并且每个应用程序在身份验证方面可能有不同的限制(例如纯文本密码字段,密码字段为MD5或SHA)哈希等)。

良好的LDAP服务需要相当多的配置知识,而不是在关系数据库中创建简单的模式。 SQL DB仍然是一个相当可互操作的选项,并且LDAP支持不像以前那样占主导地位。 LDAP曾经是多年前唯一的选择,但是许多应用程序(如Apache)和操作系统(如Linux的PAM)可以像SQL服务器一样对SQL DB进行身份验证,就像LDAP服务器一样,它们都是由抽象接口的驱动程序处理的。 / p>

LDAP真正发挥作用的是可扩展性。如果您特别希望某个地方拥有用户帐户进行身份验证并希望扩展到多个复制服务器 - 并且每秒处理数千个身份验证请求,那么LDAP就是一个不错的选择。

并不是说现代RDBMS不能扩展它只是因为它通过不同层级联复制的方式(通常)在这方面做得更好;特别是假设您有一个典型的身份验证数据库设置,其中大部分是只读的,写入操作相对较少,因此您只需要单向复制,所有写入都来自单一事实来源。

实际上,如果您有特殊需要,可以考虑使用LDAP服务器,例如特定应用程序,您希望能够与仅与LDAP集成的特定应用程序进行互操作,或者< strong>如果您正在构建高度可扩展的身份验证系统(例如,对于ISP或超级可扩展的Web应用程序 - 您计划在其中使用多个服务器 进行身份验证,以及它们可能分布在全国甚至全球各地。)

有人已经在RDBMS上建立LDAP前端这一点非常好。一些公司 - 包括Oracle(当然对RDBMS有既得利益) - 拥有专门做到这一点的产品。如果您不想要管理LDAP服务的开销,或者您只想管理数据库中的所有用户,您可以创建视图/连接,但认为可能需要LDAP服务之后,这是一个不错的选择。 OpenLDAP还支持shell后端,它可以从任何源获取数据,包括RDBMS;我已经将它与MySQL一起使用并且运行良好,但如果您需要支持特定的LDAP模式,第一次设置可能会有点繁琐。

总之,LDAP很棒,但它的具体情况是互操作性和极端可扩展性。如果您拥有有限的资源来管理和支持,那么可能不值得支持,但如果您正在计划UNIX托管的POP / IMAP / SMTP或其他第三方软件集成等服务,那么它当然值得做(甚至可能是你唯一可行的选择。)

哦,最后要警惕你决定实施的服务器使用的LDAP服务器!它们并非都是平等的,它们之间的差异(在性能和易管理性和配置方面)可能非常明显。

OpenLDAP是一个非常安全的选择,可以很好地扩展并且相当容易使用。某些应用程序最适合/来自特定LDAP服务器的特定配置文件(例如,Solaris上的许多软件假定您使用的是Sun ONE目录服务器),否则您可能无法使用它们 - 或者因为它的性能不佳,或者是配置的猪,没有得到很好的支持等。

答案 1 :(得分:8)

Microsoft创建了一个TechNet article discussing their Active Directory Application Mode (ADAM) product,它有一个比较目录和数据库之间差异的部分。以下内容直接来自网站。

目录

  • 针对搜索和阅读操作进行了优化。
  • 面向对象的分层数据设计。目录中的数据对象表示用户,计算机和共享资源等实体。这些数据对象可以按容器分层组织。
  • 不使用架构。
  • 专为复制和分布式管理而设计。
  • 精确的安全性,直至对象和属性级别。
  • 复制合作伙伴之间的数据一致性不足。

数据库

  • 针对写入操作进行了优化。
  • 关系数据设计。数据按行和列的表组织。一个表中的数据可以链接到另一个表中的数据。
  • 使用标准化,可扩展的架构。
  • 专为中央存储和数据管理而设计。
  • 不太精确的安全性,只有行和列级别。
  • 交易 - 保证数据一致性。关系表的引用完整性以及带文件和记录锁定的并发控制。

答案 2 :(得分:7)

LDAP中的“L”代表轻量级。 LDAP的一个目标是使用和实现相对简单。如果您只需要存储有关用户的信息,则不需要通过SQL访问数据的完全灵活性(并且可能会头痛)。 LDAP提供的有限界面应该更容易。如果您希望所有人(包括您的操作系统供应商和所有应用程序供应商)实施和支持LDAP,这一点非常重要。

PS:如果您愿意,您可以通过将所有信息存储在RDBMS中并为其提供LDAP接口来实现LDAP服务器:)

PPS:LDAP是一种协议,如HTTP。 RDBMS是一个应用程序,通常被认为是实现SQL的应用程序。因此,为了比较苹果和苹果,最好将LDAP与SQL或HTTP进行对比。

答案 3 :(得分:3)

这确实不排除RDBMS作为后端。请参阅有关slapd的sql后端的详细信息,或查看backends的完整列表。

答案 4 :(得分:1)

互操作性。

LDAP目录有一个标准模式来表示用户,因此常用字段(如名字,姓氏和电子邮件地址)将在不同的目录实现中一致地命名。 RDBMS不是这种情况。

LDAP定义了通信协议和查询语言。将其与SQL进行比较,SQL只是一种查询语言,每个RDBMS都实现了自己的通信协议。

因此,有许多应用程序可以简单地“插入”作为用户存储的LDAP目录,从而允许您集中管理用户。 (当然,目录实现之间仍然存在兼容性问题,但与将用户存储在每个应用程序的不同数据库中相比,这些问题很少。)

答案 5 :(得分:0)

一个很好的理由是在许多应用程序(使用LDAP)上提供单点登录。