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

szy*_*ond 25 database ldap

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

Iai*_*ins 30

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

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

LDAP真正发挥作用的是可伸缩性.如果您特别希望某个地方能够保存用户帐户以进行身份​​验证,并希望扩展到多个复制服务器 - 并且每秒处理数千个身份验证请求,那么LDAP是一个很好的选择.

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

实际上,如果您有特殊需要,可以考虑使用LDAP服务器,例如您希望能够与仅与LDAP集成的特定应用程序,或者如果您正在构建高度可扩展的身份验证系统(例如,一个ISP或超可扩展的Web应用程序-在你打算具有比奉献了几台服务器更只是身份验证,并在那里他们可以在全国各地,甚至世界各地)进行传播.

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

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

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

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

  • **因此,提出 NoSQL 数据库(例如可以执行数百万次操作的 Cassandra 或 MongoDB),上面的语句现在还成立吗?** 我对 LDAP 感到难过,因为它没有强制执行定义用户、组和的标准方法它们之间的关系,似乎许多其他技术可以像 LDAP 一样解决同样的问题。 (3认同)

Nor*_*n H 8

Microsoft已经创建了一篇讨论其Active Directory应用程序模式(ADAM)产品TechNet文章,它有一节比较目录和数据库之间的差异.以下内容直接来自该网站.

目录

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

数据库

  • 针对写入操作进行了优化.
  • 关系数据设计.数据按行和列的表组织.一个表中的数据可以链接到另一个表中的数据.
  • 使用标准化,可扩展的模式.
  • 专为中央存储和数据管理而设计.
  • 安全性较低,仅限于行和列级别.
  • 事务性 - 保证数据一致性.跨关系表的引用完整性以及具有文件和记录锁定的并发控制.


Pet*_*ore 7

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

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

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