Linux下的LDAP

Linux下的LDAP,第1张

作者简介 Atif Ghaffar 就像只变色龙 他经常变换角色 从系统管理员到程序员 再到教师 项目管理员 直至任何可以完成工作的角色 有时候 当他在**院看**的同时 他也喜欢拿出笔记本电脑编写程序 Atif始终坚信 他是属于linux和开放源码社团的 关于Atif的更多信息 可以访问他的主页~aghaffar 摘要 本文将讨论LDAP以及在我们所喜爱的 *** 作系统——linux上实现LDAP 已经有很多关于LDAP的文献 所以我不想在这里再重复什么 我不准备讨论高级的LDAP概念 计划以及第二版和第三版LDAP的区别等等 事实上 我对这类问题也所知不多 相反地 我将尝试用简单明了的语言解释什么是LDAP 它能给我们带来的好处以及我们如何使用它 我不是一个LDAP专家 我只是一个LDAP的初学者 本文介绍的是我用LDAP做了些什么以及如何做 我不会使你再像以前的我一样感到迷惑 问题 既然你是个LDAP初学者 为什么还要写一篇关于LDAP的文章? 最近我在一个项目上需要一位同事的帮助 这个项目的基础就是LDAP 我的同事可以在perl 邮件服务器等等方面帮助我 但是他对LDAP一无所知 事实是每一次他想要深入学习LDAP 反而会对LDAP越来越迷惑 因为该项目的基础是LDAP 所以我给了这位同事半小时来学习LDAP 结果是一切反而变得清晰明了了 原因很简单 LDAP是在前端的 只需要集中一点点注意力或者一些生动的例子就可以了 在本文中我也正想这样做 你可以在文中发现好多对学习LDAP有用的url LDAP是什么? LDAP是轻量目录访问协议(Ligheight Directory Access Protocol)的缩写 其实是一种目录服务 类似于我们在文件系统中所使用的目录 类似于我们查询电话号码使用的电话号码簿 类似于我们所使用诸如NIS(Neork Information Service) DNS (Domain Name Service)等网络目录 也类似于你在花园中所看到的树木 LDAP是一种特殊的数据库 但是LDAP和一般的数据库不同 明白这一点是很重要的 LDAP对查询进行了优化 与写性能相比LDAP的读性能要优秀很多 一般地 目录服务提供什么样的服务呢? 通常是根据查询的标准返回一定的信息 实例 文件系统目录 ls /etc 返回/etc目录下所有的文件和子目录 ls /etc/p 返回/etc下所有以p开头的文件和子目录 find /usr/local/apache name l 这将在 /usr/local/apache 目录下搜索名为l的文件/子目录 NIS目录 ypcat passwd 这将从NIS数据库返回用户名 密码 用户id等信息 ypmatch atif passwd 返回用户atif的密码 DNS目录 nslookup 返回的ip地址 nslookup type MX 返回主机名符合的MX记录信息 LDAP目录 (我们将在下面详细阐述) ldapsearch uid=aghaffar 返回关于用户aghaffar的所有公开信息 这和find / uid aghaffar unix命令很类似 ldapsearch uid=aghaffar mail 返回用户ughaffar的邮件信息 目录基础或根 在上面我们所提到的任何一种目录服务中都有一个我们开始浏览或搜索的开始点 这个开始点就是通常所谓的根 这和一棵数的根也很类似 每棵都有一个根 以及很多的树枝树叶 文件系统的根是 / NIS 的根是域名 比如 DNS 根是Internic(译者注 Internet网络信息中心 Internet的管理组织) LDAP同样有一个可定义的根 比如 o= 这里o表示组织 每个根都可以衍生出好多枝叶(正如同你邻居的花园中的树木一样) 对于文件系统来说 它的枝叶就是一个个文件及子目录 每一个枝叶都有一些属性 比如文件系统的枝叶(文件及子目录)有以下的属性 名称 修改时间 所有者 组(译者注 所有者所在的组) 等等 下图显示了一个文件系统目录 属性由unix命令ls ld /usr得到 下面是一个LDAP目录的图示 我们将在下面讨论这张图 区分名(DN Distinguished Name) 和自然界中的树不同 文件系统/LDAP/电话号码簿目录的每一片枝叶都至少有一个独一无二的属性 这一属性可以帮助我们来区别这些枝叶 在文件系统中 这些独一无二的属性就是带有完整路径的文件名 比如/etc/passwd 该文件名在该路径下是独一无二的 当然我们可以有/usr/passwd /opt/passwd 但是根据它们的完整路径 它们仍然是唯一的 类似于DNS系统的FQDN正式域名 FQDN也是唯一的 在LDAP中 一个条目的区分名称叫做 dn 或者叫做区分名 在一个目录中这个名称总是唯一的 比如 我的dn是 uid=aghaffar ou=People o=developer ch 不可能有相同的dn 但是我们可以有诸如 uid=aghaffar ou=Administrators o=developer ch 的dn 这同上面文件系统中/etc/passwd 和 /usr/passwd的例子很类似 我们有独一无二的属性 在 ou=Administrators o=developer ch 中uid和在 ou=People o=developer ch 中的uid 这并不矛盾 LDAP服务器 现在市场上有很多LDAP服务器 大多数都可以在linux上运行 本文将介绍openLDAP的使用 我为什么选择openLDAP 为什么你应该选择openLDAP openLDAP是开放源码的 openLDAP的官方网站是 你可以下载其源代码包自己编译 或者看看你的linux发行版是否已经包含了该软件包 如果已经包含了就可以安装预先编译好的版本从而少花费些力气 我已经成功地在SuSE x 和 RedHat x上测试过openLDAP 构建LDAP目录 下面我们将介绍设置一个LDAP服务器的步骤 步骤 下载并安装openLDAP 配置 LDAP server 配置本地环境指向LDAP 安装 初始化LDAP 数据库 查询 LDAP 添加/修改 LDAP 条目 下载并安装openLDAP 正如前面所提到的 可以从下载源代码包并根据它的相关文档进行安装 或者安装预先编译好的包(包的安装或如何编译应用程序已经超出了本文讨论的范畴) 配置LDAP服务器 在我们的例子中 我将为构建LDAP服务器 你可以用你喜欢的编辑器编辑nf和f配置文件来更改名称等参数以适应你的具体需求 在我的服务器上配置文件在/etc/openldap目录下 你的配置文件可能在/usr/local/etc/openldap或者别的地方 这要根据你的linux发行版本或者编译openldap的具体情况而定 ######### /etc/openldap/nf ################################### # 下面的部分是我的suse linux 发行版本预先定义的 # 我们设置的部分在本文的第二和第三部分 include /etc/openldap/nf include /etc/openldap/nf schemacheck off pidfile /var/run/slapd pid argsfile /var/run/slapd args ####################################################################### # ldbm database definitions ####################################################################### # 定义使用的数据库类型 缺省是ldbm database ldbm # 后缀或者根 这是你LDAP目录的顶节点 suffix o= # LDAP的dbs 保存的位置 directory /var/lib/ldap # 目录管理员的区分名 rootdn cn=Manager o= # 保存ldap目录管理员的明文密码是很糟糕的 但是我们将在刚刚开始使用ldap时这样做 rootpw secret # 这就是所有的一切 编辑你的 /etc/openldap/nf配置文件 该文件位于ldap客户端(我们将使用同一计算机作为服务器和客户端 当然这可以在同一计算机或不同的计算机上) 通常诸如ldapdelete ldapadd等等的ldap客户端会读该文件的内容 ##########/etc/openldap/nf######### # LDAP 的缺省设置 # # 查看 nf( ) 可以获取更多的信息 # 本文件应该设置为对所有人可读 # 定义ldap服务器 可以用主机名或ip地址 host # 定义我们要查询的目录的根 # 我们将要使用的顶节点 这不一定是目录的根 比如我们可以使用 # base = ou=users o=linuxfocus ch # 这时我们的一切查询都将从树根o=的分支开始 现在启动ldap服务器 如果你使用SuSE预先编译好的openldap服务器 你可以通过下面的命令启动ldap服务 /etc/rc d/ldap start 在RedHat 该命令为 /etc/rc d/init d/ldap start 如果你是使用缺省设置自己编译并安装的 你可以用/usr/local/libexec/slapd &启动ldap服务器 如果没有使用缺省设置 请找到slapd文件并运行它 在新安装的LDAP服务器上添加数据 到现在 lishixinzhi/Article/program/Oracle/201311/17322

LDAP是基于TCP/IP协议的目录访问协议,是Internet上目录服务的通用访问协议。LDAP的出现简化了X500目录的复杂度,降低了开发成本,是X500标准的目录访问协议DAP的子集,同时也作为IETF的一个正式标准。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。

从上述定义不难看出LDAP是一个目录,那么该目录是如何出现,有什么用呢?

在当今的信息世界,网络为人们提供了丰富的资源。随着网络资源的日益丰富,迫切需要一种能有效管理资源信息并利于检索查询的服务技术。目录服务技术随之产生。

1LDAP目录服务可以有效地解决众多网络服务的用户账户问题。

2LDAP目录服务规定了统一的身份信息数据库、身份认证机制和接口,实现了资源和信息的统一管理,保证了数据的一致性和完整性。

3LDAP目录服务是以树状的层次结构来描述数据信息的,此种模型适应了众多行业应用的业务组织结构。

LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一种类型的数据库,但是不是关系型数据库。不象被设计成每分钟需要处理成百上千条数据变化的数据库,例如:在电子商务中经常用到的在线交易处理(OLTP)系统,LDAP主要是优化数据读取的性能。

LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。

分类: 电脑/网络 >> 软件

解析:

LDAP的英文全称是Ligheight Directory Access Protocol,一般都简称为LDAP。它是基于X500标准的,但是简单多了并且可以根据需要定制。与X500不同,LDAP支持TCP/IP,这对访问Inter是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。怎么使用LDAP这个术语呢?

在日常交谈中,你可能会听到有些人这么说:“我们要把那些东西存在LDAP中吗?”,或者“从LDAP数据库中取出那些数据!”,又或者“我们怎么把LDAP和关系型数据库集成在一起?”。严格地说,LDAP根本不是数据库而是用来访问存储在信息目录(也就是LDAP目录)中的信息的协议。更为确切和正式的说法应该是象这样的:“通过使用LDAP,可以在信息目录的正确位置读取(或存储)数据”。但是,也没有必要吹毛求疵,尽管表达得不够准确,我们也都知道对方在说什么。

参考:linuxaid/engineer/brimmerLDAP#_

关于mysql处理百万级以上的数据时如何提高其查询速度的方法

最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法。

由于在参与的实际项目中发现当mysql表的数据量达到百万级时,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍。曾经测试对一个包含400多万条记录(有索引)的表执行一条条件查询,其查询时间竟然高达40几秒,相信这么高的查询延时,任何用户都会抓狂。因此如何提高sql语句查询效率,显得十分重要。以下是网上流传比较广泛的30种SQL查询语句优化方法:

1、应尽量避免在where子句中使用!=或> *** 作符,否则将引擎放弃使用索引而进行全表扫描。

2、对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。

3、应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

selectidfromtwherenumisnull

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

selectidfromtwherenum=0

4、尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

selectidfromtwherenum=10ornum=20

可以这样查询:

selectidfromtwherenum=10

unionall

selectidfromtwherenum=20

5、下面的查询也将导致全表扫描:(不能前置百分号)

selectidfromtwherenamelike‘%c%’

若要提高效率,可以考虑全文检索。

6、in和notin也要慎用,否则会导致全表扫描,如:

selectidfromtwherenumin(1,2,3)

对于连续的数值,能用between就不要用in了:

selectidfromtwherenumbetween1and3

7、如果在where子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

selectidfromtwherenum=@num

可以改为强制查询使用索引:

selectidfromtwith(index(索引名))wherenum=@num

8、应尽量避免在where子句中对字段进行表达式 *** 作,这将导致引擎放弃使用索引而进行全表扫描。如:

selectidfromtwherenum/2=100

应改为:

selectidfromtwherenum=1002

9、应尽量避免在where子句中对字段进行函数 *** 作,这将导致引擎放弃使用索引而进行全表扫描。如:

selectidfromtwheresubstring(name,1,3)=’abc’_name以abc开头的id

selectidfromtwheredatediff(day,createdate,’2005-11-30′)=0_’2005-11-30′生成的id

应改为:

selectidfromtwherenamelike‘abc%’

selectidfromtwherecreatedate>=’2005-11-30′andcreatedate

10、不要在where子句中的逗=地左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

11、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

12、不要写一些没有意义的查询,如需要生成一个空表结构:

selectcol1,col2into#tfromtwhere1=0

这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:

createtable#t()

13、很多时候用exists代替in是一个好的选择:

selectnumfromawherenumin(selectnumfromb)

用下面的语句替换:

selectnumfromawhereexists(select1frombwherenum=anum)

14、并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

15、索引并不是越多越好,索引固然可以提高相应的select的效率,但同时也降低了insert及update的效率,因为insert或update时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

16应尽可能的避免更新clustered索引数据列,因为clustered索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新clustered索引数据列,那么需要考虑是否应将该索引建为clustered索引。

17、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

18、尽可能的使用varchar/nvarchar代替char/nchar,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

19、任何地方都不要使用selectfromt,用具体的字段列表代替逗地,不要返回用不到的任何字段。

20、尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

21、避免频繁创建和删除临时表,以减少系统表资源的消耗。

22、临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。

23、在新建临时表时,如果一次性插入数据量很大,那么可以使用selectinto代替createtable,避免造成大量log,以提高速度;如果数据量不大,为了缓和系统表的资源,应先createtable,然后insert。

24、如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncatetable,然后droptable,这样可以避免系统表的较长时间锁定。

25、尽量避免使用游标,因为游标的效率较差,如果游标 *** 作的数据超过1万行,那么就应该考虑改写。

26、使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。

27、与临时表一样,游标并不是不可使用。对小型数据集使用FAST_FORWARD游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括逗合计地的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。

28、在所有的存储过程和触发器的开始处设置SETNOCOUNTON,在结束时设置SETNOCOUNTOFF。无需在执行存储过程和触发器的每个语句后向客户端发送DONE_IN_PROC消息。

29、尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

30、尽量避免大事务 *** 作,提高系统并发能力。

LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X500标准的,但是简单得多并且可以根据需要定制。

LDAP由互联网工程任务组(IETF)的文档RFC定义,使用了描述语言ASN1定义。最新的版本是版本3,由RFC 4511所定义。例如,一个用语言描述的LDAP的搜索如:“在公司邮件目录中搜索公司位于那什维尔名字中含有“Jessy”的有邮件地址的所有人。请返回他们的全名,电子邮件,头衔和简述。”

扩展资料:

LDAP-开发方式

如果需要开发一种提供公共信息查询的系统一般的设计方法可能是采用基于WEB的数据库设计方式,即前端使用浏览器而后端使用WEB服务器加上关系数据库。后端在Windows的典型实现可能是Windows NT + IIS + Acess数据库或者是SQL SERVER,IIS和数据库之间通过ASP技术使用ODBC进行连接,达到通过填写表单查询数据的功能;

参考资料来源:百度百科-LDAP

参考资料来源:百度百科-目录访问协议

以上就是关于Linux下的LDAP全部的内容,包括:Linux下的LDAP、什么叫LDAPLDAP服务器是什么、LDAP是啥意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9681700.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存