﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-忆风-随笔分类-DataBase</title><link>http://www.blogjava.net/yifeng/category/34015.html</link><description>光是知道是不够的，必须要加以应用；光是希望是不够的，非去做不可。</description><language>zh-cn</language><lastBuildDate>Sun, 21 Sep 2008 22:56:39 GMT</lastBuildDate><pubDate>Sun, 21 Sep 2008 22:56:39 GMT</pubDate><ttl>60</ttl><item><title> LDAP学习者必看</title><link>http://www.blogjava.net/yifeng/archive/2008/09/17/229406.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Wed, 17 Sep 2008 05:44:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/09/17/229406.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/229406.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/09/17/229406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/229406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/229406.html</trackback:ping><description><![CDATA[<p><span style="font-family: 宋体">如果你在计算机行业工作，那么对</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">可能早有耳闻了。想深入地了解</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">吗？那么可以好好地读一下这篇文章。这篇介绍性的文章是一系列介绍如何在企业中设计、实现和集成</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">环境的文章的头一篇。主要是先让你熟悉一下</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">的基本概念，那些比较困难的细节问题将放到以后讨论。在这篇文章中我们将要介绍：</span></p>
<br />
<p><strong>什么是LDAP?</strong></p>
<p><strong>什么时候该用LDAP存储数据？</strong></p>
<p><strong>LDAP目录树的结构</strong></p>
<p><strong>单独的LDAP记录</strong></p>
<p><strong>作为例子的一个单独的数据项</strong></p>
<p><strong>LDAP复制</strong></p>
<p><strong>安全和访问控制</strong></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">现在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">技术不仅发展得很快而且也是激动人心的。在企业范围内实现</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">可以让运行在几乎所有计算机平台上的所有的应用程序从</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录中获取信息。</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录中可以存储各种类型的数据：电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表，等等。通过把</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录作为系统集成中的一个重要环节，可以简化员工在企业内部查询信息的步骤，甚至连主要的数据源都可以放在任何地方。如果</span><span lang="EN-US">Oracle</span><span style="font-family: 宋体">、</span><span lang="EN-US">Sybase</span><span style="font-family: 宋体">、</span><span lang="EN-US">Informix</span><span style="font-family: 宋体">或</span><span lang="EN-US">Microsoft SQL</span><span style="font-family: 宋体">数据库中已经存储了类似的数据，那么</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">和这些数据库到底有什么不同呢？是什么让它更具优势？请继续读下去吧！</span></p>
<br />
<h2><a name="_什么是LDAP?"></a><span style="font-family: 黑体">什么是</span><span lang="EN-US">LDAP?</span></h2>
<br />
<p><span lang="EN-US">LDAP</span><span style="font-family: 宋体">的英文全称是</span><span lang="EN-US" style="color: black">Lightweight Directory Access Protocol</span><span style="font-family: 宋体">，一般都简称为</span><span lang="EN-US" style="color: black">LDAP</span><span style="color: black; font-family: 宋体">。它是基于</span><span lang="EN-US" style="color: black">X.500</span><span style="font-family: 宋体">标准的，但是简单多了并且可以根据需要定制。与</span><span lang="EN-US" style="color: black">X.500</span><span style="font-family: 宋体">不同，</span><span lang="EN-US" style="color: black">LDAP</span><span style="color: black; font-family: 宋体">支持</span><span lang="EN-US" style="color: black">TCP/IP</span><span style="font-family: 宋体">，这对访问</span><span lang="EN-US" style="color: black">Internet</span><span style="font-family: 宋体">是必须的。</span><span lang="EN-US" style="color: black">LDAP</span><span style="font-family: 宋体">的核心规范在</span><span lang="EN-US" style="color: black">RFC</span><span style="font-family: 宋体">中都有定义，所有与</span><span lang="EN-US" style="color: black">LDAP</span><span style="font-family: 宋体">相关的</span><span lang="EN-US" style="color: black">RFC</span><span style="color: black; font-family: 宋体">都可以在</span><span lang="EN-US" style="color: black"><a href="http://book.chinaz.com/others/www.ldapman.org/ldap_rfcs.html">LDAPman RFC</a></span><span style="font-family: 宋体">网页中找到。</span></p>
<br />
<h3><span style="font-family: 宋体">怎么使用</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">这个术语呢？</span></h3>
<br />
<p><span style="font-family: 宋体">在日常交谈中，你可能会听到有些人这么说：&#8220;我们要把那些东西存在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">中吗？&#8221;，或者&#8220;从</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">数据库中取出那些数据！&#8221;，又或者&#8220;我们怎么把</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">和关系型数据库集成在一起？&#8221;。严格地说，</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">根本不是数据库而是用来访问存储在信息目录（也就是</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录）中的信息的<strong>协议</strong>。更为确切和正式的说法应该是象这样的：&#8220;通过使用</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">，可以在信息目录的正确位置读取（或存储）数据&#8221;。但是，也没有必要吹毛求疵，尽管表达得不够准确，我们也都知道对方在说什么。</span></p>
<br />
<h3><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录是数据库吗？</span></h3>
<br />
<p><span style="font-family: 宋体">就象</span><span lang="EN-US">Sybase</span><span style="font-family: 宋体">、</span><span lang="EN-US">Oracle</span><span style="font-family: 宋体">、</span><span lang="EN-US">Informix</span><span style="font-family: 宋体">或</span><span lang="EN-US">Microsoft</span><span style="font-family: 宋体">的数据库管理系统（</span><span lang="EN-US">DBMS</span><span style="font-family: 宋体">）是用于处理查询和更新关系型数据库那样，</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">服务器也是用来处理查询和更新</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录的。换句话来说</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录也是<strong>一种类型</strong>的数据库，但是不是关系型数据库。不象被设计成每分钟需要处理成百上千条数据变化的数据库，例如：在电子商务中经常用到的在线交易处理（</span><span lang="EN-US">OLTP</span><span style="font-family: 宋体">）系统，</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">主要是优化数据读取的性能。</span></p>
<br />
<h3><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录的优势</span></h3>
<br />
<p><span style="font-family: 宋体">现在该说说</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录到底有些什么优势了。现在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">的流行是很多因数共同作用的结果。我在这里说的不过是一些基本的原因，请你注意一下这不过是一小部分原因。</span></p>
<br />
<p><span style="font-family: 宋体">可能</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">最大的优势是：可以在任何计算机平台上，用很容易获得的而且数目不断增加的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">的客户端程序访问</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录。而且也很容易定制应用程序为它加上</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">的支持。</span></p>
<br />
<p><span lang="EN-US">LDAP</span><span style="font-family: 宋体">协议是跨平台的和标准的协议，因此应用程序就不用为</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录放在什么样的服务器上操心了。实际上，</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">得到了业界的广泛认可，因为它是</span><span lang="EN-US">Internet</span><span style="font-family: 宋体">的标准。产商都很愿意在产品中加入对</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">的支持，因为他们根本不用考虑另一端（客户端或服务端）是怎么样的。</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">服务器可以是任何一个开发源代码或商用的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录服务器（或者还可能是具有</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">界面的关系型数据库），因为可以用同样的协议、客户端连接软件包和查询命令与</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">服务器进行交互。与</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">不同的是，如果软件产商想在软件产品中集成对</span><span lang="EN-US">DBMS</span><span style="font-family: 宋体">的支持，那么通常都要对每一个数据库服务器单独定制。</span></p>
<br />
<p><span style="font-family: 宋体">不象很多商用的关系型数据库，你不必为</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">的每一个客户端连接或许可协议付费。</span></p>
<br />
<p><span style="font-family: 宋体">大多数的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">服务器安装起来很简单，也容易维护和优化。</span></p>
<br />
<p><span lang="EN-US">LDAP</span><span style="font-family: 宋体">服务器可以用&#8220;推&#8221;或&#8220;拉&#8221;的方法复制部分或全部数据，例如：可以把数据&#8220;推&#8221;到远程的办公室，以增加数据的安全性。复制技术是内置在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">服务器中的而且很容易配置。如果要在</span><span lang="EN-US">DBMS</span><span style="font-family: 宋体">中使用相同的复制功能，数据库产商就会要你支付额外的费用，而且也很难管理。</span></p>
<br />
<p><span lang="EN-US">LDAP</span><span style="font-family: 宋体">允许你根据需要使用</span><span lang="EN-US">ACI</span><span style="font-family: 宋体">（一般都称为</span><span lang="EN-US">ACL</span><span style="font-family: 宋体">或者访问控制列表）控制对数据读和写的权限。例如，设备管理员可以有权改变员工的工作地点和办公室号码，但是不允许改变记录中其它的域。</span><span lang="EN-US">ACI</span><span style="font-family: 宋体">可以根据谁访问数据、访问什么数据、数据存在什么地方以及其它对数据进行访问控制。因为这些都是由</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录服务器完成的，所以不用担心在客户端的应用程序上是否要进行安全检查。</span></p>
<br />
<p><span lang="EN-US">LDAP</span><span style="font-family: 宋体">对于这样存储这样的信息最为有用，也就是数据需要从不同的地点读取，但是不需要经常更新。例如，这些信息存储在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录中是十分有效的：</span></p>
<br />
<p class="MsoListBullet"><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">公司员工的电话号码簿和组织结构图</span></p>
<br />
<p class="MsoListBullet"><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">客户的联系信息</span></p>
<br />
<p class="MsoListBullet"><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">计算机管理需要的信息，包括</span><span lang="EN-US">NIS</span><span style="font-family: 宋体">映射、</span><span lang="EN-US">email</span><span style="font-family: 宋体">假名，等等</span></p>
<br />
<p class="MsoListBullet"><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">软件包的配置信息</span></p>
<br />
<p class="MsoListBullet"><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">公用证书和安全密匙</span></p>
<br />
<h2><a name="_什么时候该用LDAP存储数据"></a><a name="_什么时候该用LDAP存储数据？"></a><span style="font-family: 黑体">什么时候该用</span><span lang="EN-US">LDAP</span><span style="font-family: 黑体">存储数据？</span></h2>
<br />
<p><span style="color: black; font-family: 宋体">大多数的</span><span lang="EN-US" style="color: black">LDAP</span><span style="font-family: 宋体">服务器都为读密集型的操作进行专门的优化。因此，当从</span><span lang="EN-US" style="color: black">LDAP</span><span style="color: black; font-family: 宋体">服务器中读取数据的时候会比从专门为</span><span lang="EN-US" style="color: black">OLTP</span><span style="font-family: 宋体">优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化，大多数的</span><span lang="EN-US" style="color: black">LDAP</span><span style="color: black; font-family: 宋体">目录服务器并不适合存储需要需要经常改变的数据。例如，用</span><span lang="EN-US" style="color: black">LDAP</span><span style="font-family: 宋体">服务器来存储电话号码是一个很好的选择，但是它不能作为电子商务站点的数据库服务器。</span></p>
<br />
<p><span style="color: black; font-family: 宋体">如果下面每一个问题的答案都是&#8220;是&#8221;，那么把数据存在</span><span lang="EN-US" style="color: black">LDAP</span><span style="color: black; font-family: 宋体">中就是一个好主意。</span></p>
<br />
<p class="MsoListBullet"><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">需要在任何平台上都能读取数据吗？</span></p>
<br />
<p class="MsoListBullet"><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">每一个单独的记录项是不是每一天都只有很少的改变？</span></p>
<br />
<p class="MsoListBullet"><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">可以把数据存在平面数据库（</span><span lang="EN-US">flat database</span><span style="font-family: 宋体">）而不是关系型数据库中吗？换句话来说，也就是不管什么范式不范式的，把所有东西都存在一个记录中（差不多只要满足第一范式）。</span></p>
<br />
<p><span style="font-family: 宋体">最后一个问题可能会唬住一些人，其实用平面数据库去存储一些关系型的数据也是很一般的。例如，一条公司员工的记录就可以包含经理的登录名。用</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">来存储这类信息是很方便的。一个简单的判断方法：如果可以把保数据存在一张张的卡片里，就可以很容易地把它存在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录里。</span></p>
<br />
<h2><a name="_LDAP目录树的结构"></a><span lang="EN-US">LDAP</span><span style="font-family: 黑体">目录树的结构</span></h2>
<br />
<p><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录以树状的层次结构来存储数据。如果你对自顶向下的</span><span lang="EN-US">DNS</span><span style="font-family: 宋体">树或</span><span lang="EN-US">UNIX</span><span style="font-family: 宋体">文件的目录树比较熟悉，也就很容易掌握</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录树这个概念了。就象</span><span lang="EN-US">DNS</span><span style="font-family: 宋体">的主机名那样，</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录记录的标识名（</span><span lang="EN-US">Distinguished Name</span><span style="font-family: 宋体">，简称</span><span lang="EN-US">DN</span><span style="font-family: 宋体">）是用来读取单个记录，以及回溯到树的顶部。后面会做详细地介绍。</span></p>
<br />
<p><span style="font-family: 宋体">为什么要用层次结构来组织数据呢？原因是多方面的。下面是可能遇到的一些情况：</span></p>
<br />
<p><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">如果你想把所有的美国客户的联系信息都&#8220;推&#8221;到位于到西雅图办公室（负责营销）的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">服务器上，但是你不想把公司的资产管理信息&#8220;推&#8221;到那里。</span></p>
<br />
<p><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">你可能想根据目录树的结构给予不同的员工组不同的权限。在下面的例子里，资产管理组对&#8220;</span><span lang="EN-US">asset-mgmt</span><span style="font-family: 宋体">&#8221;部分有完全的访问权限，但是不能访问其它地方。</span></p>
<br />
<p><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">把</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">存储和复制功能结合起来，可以定制目录树的结构以降低对</span><span lang="EN-US">WAN</span><span style="font-family: 宋体">带宽的要求。位于西雅图的营销办公室需要每分钟更新的美国销售状况的信息，但是欧洲的销售情况就只要每小时更新一次就行了。</span></p>
<br />
<h3><span style="font-family: 宋体">刨根问底：基准</span><span lang="EN-US">DN</span></h3>
<br />
<p><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录树的最顶部就是根，也就是所谓的&#8220;基准</span><span lang="EN-US">DN</span><span style="font-family: 宋体">&#8221;。基准</span><span lang="EN-US">DN</span><span style="font-family: 宋体">通常使用下面列出的三种格式之一。假定我在名为</span><span lang="EN-US">FooBar</span><span style="font-family: 宋体">的电子商务公司工作，这家公司在</span><span lang="EN-US">Internet</span><span style="font-family: 宋体">上的名字是</span><span lang="EN-US">foobar.com</span><span style="font-family: 宋体">。</span></p>
<br />
<p class="a"><strong><span lang="EN-US">o="FooBar, Inc.", c=US </span></strong></p>
<br />
<p><em><span style="color: black; font-family: 宋体">（以</span><span lang="EN-US" style="color: black">X.500</span></em><em><span style="font-family: 宋体">格式表示的基准</span><span lang="EN-US" style="color: black">DN</span></em><em><span style="color: black; font-family: 宋体">）</span></em></p>
<br />
<p><span style="font-family: 宋体">在这个例子中，</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">o=FooBar, Inc. </span><span style="font-family: 宋体">表示组织名，在这里就是公司名的同义词。</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">c=US </span><span style="font-family: 宋体">表示公司的总部在美国。以前，一般都用这种方式来表示基准</span><span lang="EN-US">DN</span><span style="font-family: 宋体">。但是事物总是在不断变化的，现在所有的公司都已经（或计划）上</span><span lang="EN-US">Internet</span><span style="font-family: 宋体">上。随着</span><span lang="EN-US">Internet</span><span style="font-family: 宋体">的全球化，在基准</span><span lang="EN-US">DN</span><span style="font-family: 宋体">中使用国家代码很容易让人产生混淆。现在，</span><span lang="EN-US">X.500</span><span style="font-family: 宋体">格式发展成下面列出的两种格式。</span></p>
<br />
<p class="a"><strong><span lang="EN-US">o=foobar.com</span></strong></p>
<br />
<p><em><span style="font-family: 宋体">（用公司的</span><span lang="EN-US">Internet</span></em><em><span style="font-family: 宋体">地址表示的基准</span><span lang="EN-US">DN</span></em><em><span style="font-family: 宋体">）</span></em></p>
<br />
<p><span style="font-family: 宋体">这种格式很直观，用公司的域名作为基准</span><span lang="EN-US">DN</span><span style="font-family: 宋体">。这也是现在最常用的格式。</span></p>
<br />
<p class="a"><strong><span lang="EN-US">dc=foobar, dc=com</span></strong></p>
<br />
<p><em><span style="font-family: 宋体">（用</span><span lang="EN-US">DNS</span></em><em><span style="font-family: 宋体">域名的不同部分组成的基准</span><span lang="EN-US">DN</span></em><em><span style="font-family: 宋体">）</span></em></p>
<br />
<p><span style="font-family: 宋体">就象上面那一种格式，这种格式也是以</span><span lang="EN-US">DNS</span><span style="font-family: 宋体">域名为基础的，但是上面那种格式不改变域名（也就更易读），而这种格式把域名：</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">foobar.com</span><span style="font-family: 宋体">分成两部分</span> <span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">dc=foobar, dc=com</span><span style="font-size: 10.5pt; font-family: 黑体">。</span><span style="font-family: 宋体">在理论上，这种格式可能会更灵活一点，但是对于最终用户来说也更难记忆一点。考虑一下</span><span lang="EN-US">foobar.com</span><span style="font-family: 宋体">这个例子。当</span><span lang="EN-US">foobar.com</span><span style="font-family: 宋体">和</span><span lang="EN-US">gizmo.com</span><span style="font-family: 宋体">合并之后，可以简单的把&#8220;</span><span lang="EN-US">dc=com</span><span style="font-family: 宋体">&#8221;当作基准</span><span lang="EN-US">DN</span><span style="font-family: 宋体">。把新的记录放到已经存在的</span><span lang="EN-US">dc=gizmo, dc=com</span><span style="font-family: 宋体">目录下，这样就简化了很多工作（当然，如果</span><span lang="EN-US">foobar.com</span><span style="font-family: 宋体">和</span><span lang="EN-US">wocket.edu</span><span style="font-family: 宋体">合并，这个方法就不能用了）。如果</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">服务器是新安装的，我建议你使用这种格式。再请注意一下，如果你打算使用活动目录（</span><span lang="EN-US">Actrive Directory</span><span style="font-family: 宋体">），</span><span lang="EN-US">Microsoft</span><span style="font-family: 宋体">已经限制你必须使用这种格式。</span></p>
<br />
<h3><span style="font-family: 宋体">更上一层楼：在目录树中怎么组织数据</span></h3>
<br />
<p><span style="font-family: 宋体">在</span><span lang="EN-US">UNIX</span><span style="font-family: 宋体">文件系统中，最顶层是根目录（</span><span lang="EN-US">root</span><span style="font-family: 宋体">）。在根目录的下面有很多的文件和目录。象上面介绍的那样，</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录也是用同样的方法组织起来的。</span></p>
<br />
<p><span style="font-family: 宋体">在根目录下，要把数据从逻辑上区分开。因为历史上（</span><span lang="EN-US">X.500</span><span style="font-family: 宋体">）的原因，大多数</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录用</span><span lang="EN-US">OU</span><span style="font-family: 宋体">从逻辑上把数据分开来。</span><span lang="EN-US">OU</span><span style="font-family: 宋体">表示&#8220;</span><span lang="EN-US">Organization Unit</span><span style="font-family: 宋体">&#8221;，在</span><span lang="EN-US">X.500</span><span style="font-family: 宋体">协议中是用来表示公司内部的机构：销售部、财务部，等等。现在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">还保留</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">ou=</span><span style="font-family: 宋体">这样的命名规则，但是扩展了分类的范围，可以分类为：</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">ou=people, ou=groups, ou=devices</span><span style="font-family: 宋体">，等等。更低一级的</span><span lang="EN-US" style="color: black">OU</span><span style="font-family: 宋体">有时用来做更细的归类。例如：</span><span lang="EN-US" style="color: black">LDAP</span><span style="color: black; font-family: 宋体">目录树（不包括单独的记录）可能会是这样的：</span></p>
<br />
<p class="a"><span>&nbsp;&nbsp;&nbsp; </span>dc=foobar, dc=com </p>
<br />
<p class="a"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ou=customers </p>
<br />
<p class="a"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ou=asia </p>
<br />
<p class="a"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ou=europe </p>
<br />
<p class="a"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ou=usa </p>
<br />
<p class="a"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ou=employees </p>
<br />
<p class="a"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ou=rooms </p>
<br />
<p class="a"><span>&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ou=groups </p>
<br />
<p class="a"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ou=assets-mgmt </p>
<br />
<p class="a"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ou=nisgroups </p>
<br />
<p class="a"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ou=recipes</p>
<br />
<h2><a name="_单独的LDAP记录"></a><span style="font-family: 黑体">单独的</span><span lang="EN-US">LDAP</span><span style="font-family: 黑体">记录</span></h2>
<br />
<h3><span lang="EN-US">DN</span><span style="font-family: 宋体">是</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">记录项的名字</span></h3>
<br />
<p><span style="font-family: 宋体">在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录中的所有记录项都有一个唯一的&#8220;</span><span lang="EN-US">Distinguished Name</span><span style="font-family: 宋体">&#8221;，也就是</span><span lang="EN-US">DN</span><span style="font-family: 宋体">。每一个</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">记录项的</span><span lang="EN-US">DN</span><span style="font-family: 宋体">是由两个部分组成的：相对</span><span lang="EN-US">DN</span><span style="font-family: 宋体">（</span><span lang="EN-US">RDN</span><span style="font-family: 宋体">）和记录在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录中的位置。</span></p>
<br />
<p><span lang="EN-US">RDN</span><span style="font-family: 宋体">是</span><span lang="EN-US">DN</span><span style="font-family: 宋体">中与目录树的结构无关的部分。在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录中存储的记录项都要有一个名字，这个名字通常存在</span><span lang="EN-US">cn</span><span style="font-family: 宋体">（</span><span lang="EN-US">Common Name</span><span style="font-family: 宋体">）这个属性里。因为几乎所有的东西都有一个名字，在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">中存储的对象都用它们的</span><span lang="EN-US">cn</span><span style="font-family: 宋体">值作为</span><span lang="EN-US">RDN</span><span style="font-family: 宋体">的基础。如果我把最喜欢的吃燕麦粥食谱存为一个记录，我就会用</span><strong><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">cn=Oatmeal Deluxe</span></strong><span style="font-family: 宋体">作为记录项的</span><span lang="EN-US">RDN</span><span style="font-family: 宋体">。</span></p>
<br />
<p><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">我的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录的基准</span><span lang="EN-US">DN</span><span style="font-family: 宋体">是</span><strong><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">dc=foobar,dc=com</span></strong></p>
<br />
<p><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">我把自己的食谱作为</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">的记录项存在</span><strong><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">ou=recipes</span></strong></p>
<br />
<p><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">我的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">记录项的</span><span lang="EN-US">RDN</span><span style="font-family: 宋体">设为</span><strong><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">cn=Oatmeal Deluxe</span></strong></p>
<br />
<p><span style="font-family: 宋体">上面这些构成了燕麦粥食谱的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">记录的完整</span><span lang="EN-US">DN</span><span style="font-family: 宋体">。记住，</span><span lang="EN-US">DN</span><span style="font-family: 宋体">的读法和</span><span lang="EN-US">DNS</span><span style="font-family: 宋体">主机名类似。下面就是完整的</span><span lang="EN-US">DN</span><span style="font-family: 宋体">：</span></p>
<br />
<p class="a"><strong><span lang="EN-US">cn=Oatmeal Deluxe,ou=recipes,dc=foobar,dc=com</span></strong></p>
<br />
<h3><span style="font-family: 宋体">举一个实际的例子来说明</span><span lang="EN-US">DN</span></h3>
<br />
<p><span style="font-family: 宋体">现在为公司的员工设置一个</span><span lang="EN-US">DN</span><span style="font-family: 宋体">。可以用基于</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">cn</span><span style="font-family: 宋体">或</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">uid</span><span style="font-family: 宋体">（</span><span lang="EN-US">User ID</span><span style="font-family: 宋体">），作为典型的用户帐号。例如，</span><span lang="EN-US">FooBar</span><span style="font-family: 宋体">的员工</span><span lang="EN-US">Fran Smith</span><span style="font-family: 宋体">（登录名：</span><span lang="EN-US">fsmith</span><span style="font-family: 宋体">）的</span><span lang="EN-US">DN</span><span style="font-family: 宋体">可以为下面两种格式：</span></p>
<br />
<p class="a"><strong><span lang="EN-US">uid=fsmith,ou=employees,dc=foobar,dc=com</span></strong></p>
<br />
<p><em><span style="font-family: 宋体">（基于登录名）</span></em></p>
<br />
<p><span lang="EN-US">LDAP</span><span style="font-family: 宋体">（以及</span><span lang="EN-US">X.500</span><span style="font-family: 宋体">）用</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">uid</span><span style="font-family: 宋体">表示&#8220;</span><span lang="EN-US">User ID</span><span style="font-family: 宋体">&#8221;，不要把它和</span><span lang="EN-US">UNIX</span><span style="font-family: 宋体">的</span><span lang="EN-US">uid</span><span style="font-family: 宋体">号混淆了。大多数公司都会给每一个员工唯一的登录名，因此用这个办法可以很好地保存员工的信息。你不用担心以后还会有一个叫</span><span lang="EN-US">Fran Smith</span><span style="font-family: 宋体">的加入公司，如果</span><span lang="EN-US">Fran</span><span style="font-family: 宋体">改变了她的名字（结婚？离婚？或宗教原因？），也用不着改变</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">记录项的</span><span lang="EN-US">DN</span><span style="font-family: 宋体">。</span></p>
<br />
<p class="a"><strong><span lang="EN-US">cn=Fran Smith,ou=employees,dc=foobar,dc=com</span></strong></p>
<br />
<p><em><span style="font-family: 宋体">（基于姓名）</span></em></p>
<br />
<p><span style="font-family: 宋体">可以看到这种格式使用了</span><span lang="EN-US">Common Name</span><span style="font-family: 宋体">（</span><span lang="EN-US">CN</span><span style="font-family: 宋体">）。可以把</span><span lang="EN-US">Common Name</span><span style="font-family: 宋体">当成一个人的全名。这种格式有一个很明显的缺点就是：如果名字改变了，</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">的记录就要从一个</span><span lang="EN-US">DN</span><span style="font-family: 宋体">转移到另一个</span><span lang="EN-US">DN</span><span style="font-family: 宋体">。但是，我们应该尽可能地避免改变一个记录项的</span><span lang="EN-US">DN</span><span style="font-family: 宋体">。</span></p>
<br />
<h2><span style="font-family: 黑体">定制目录的对象类型</span></h2>
<br />
<p><span style="font-family: 宋体">你可以用</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">存储各种类型的数据对象，只要这些对象可以用属性来表示，下面这些是可以在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">中存储的一些信息：</span></p>
<br />
<p><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">员工信息：员工的姓名、登录名、口令、员工号、他的经理的登录名，邮件服务器，等等。</span></p>
<br />
<p><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">物品跟踪信息：计算机名、</span><span lang="EN-US">IP</span><span style="font-family: 宋体">地址、标签、型号、所在位置，等等。</span></p>
<br />
<p><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">客户联系列表：客户的公司名、主要联系人的电话、传真和电子邮件，等等。</span></p>
<br />
<p><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">会议厅信息：会议厅的名字、位置、可以坐多少人、电话号码、是否有投影机。</span></p>
<br />
<p><span lang="EN-US" style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">食谱信息：菜的名字、配料、烹调方法以及准备方法。</span></p>
<br />
<p><span style="font-family: 宋体">因为</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录可以定制成存储任何文本或二进制数据，到底存什么要由你自己决定。</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录用对象类型（</span><span lang="EN-US">object classes</span><span style="font-family: 宋体">）的概念来定义运行哪一类的对象使用什么属性。在几乎所有的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">服务器中，你都要根据自己的需要扩展基本的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录的功能，创建新的对象类型或者扩展现存的对象类型。</span></p>
<br />
<p><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录以一系列&#8220;属性对&#8221;的形式来存储记录项，每一个记录项包括属性类型和属性值（这与关系型数据库用行和列来存取数据有根本的不同）。下面是我存在</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录中的一部分食谱记录：</span></p>
<br />
<p class="a"><span>&nbsp; </span>dn: cn=Oatmeal Deluxe, ou=recipes, dc=foobar, dc=com </p>
<br />
<p class="a"><span>&nbsp; </span>cn: Instant Oatmeal Deluxe </p>
<br />
<p class="a"><span>&nbsp; </span>recipeCuisine: breakfast </p>
<br />
<p class="a"><span>&nbsp; </span>recipeIngredient: 1 packet instant oatmeal </p>
<br />
<p class="a"><span>&nbsp; </span>recipeIngredient: 1 cup water </p>
<br />
<p class="a"><span>&nbsp; </span>recipeIngredient: 1 pinch salt </p>
<br />
<p class="a"><span>&nbsp; </span>recipeIngredient: 1 tsp brown sugar </p>
<br />
<p class="a"><span>&nbsp; </span>recipeIngredient: 1/4 apple, any type</p>
<br />
<p><span style="font-family: 宋体">请注意上面每一种配料都作为属性</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">recipeIngredient</span><span style="font-family: 宋体">值。</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录被设计成象上面那样为一个属性保存多个值的，而不是在每一个属性的后面用逗号把一系列值分开。</span></p>
<br />
<p><span style="font-family: 宋体">因为用这样的方式存储数据，所以数据库就有很大的灵活性，不必为加入一些新的数据就重新创建表和索引。更重要的是，</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录不必花费内存或硬盘空间处理&#8220;空&#8221;域，也就是说，实际上不使用可选择的域也不会花费你任何资源。</span></p>
<br />
<h2><a name="_作为例子的一个单独的数据项"></a><span style="font-family: 黑体">作为例子的一个单独的数据项</span></h2>
<br />
<p><span style="font-family: 宋体">让我们看看下面这个例子。我们用</span><span lang="EN-US">Foobar, Inc.</span><span style="font-family: 宋体">的员工</span><span lang="EN-US">Fran Smith</span><span style="font-family: 宋体">的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">记录。这个记录项的格式是</span><span lang="EN-US">LDIF</span><span style="font-family: 宋体">，用来导入和导出</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">目录的记录项。</span></p>
<br />
<p class="a"><span>&nbsp; </span>dn: uid=fsmith, ou=employees, dc=foobar, dc=com</p>
<br />
<p class="a"><span>&nbsp; </span>objectclass: person</p>
<br />
<p class="a"><span>&nbsp; </span>objectclass: organizationalPerson</p>
<br />
<p class="a"><span>&nbsp; </span>objectclass: inetOrgPerson</p>
<br />
<p class="a"><span>&nbsp; </span>objectclass: foobarPerson</p>
<br />
<p class="a"><span>&nbsp; </span>uid: fsmith</p>
<br />
<p class="a"><span>&nbsp; </span>givenname: Fran</p>
<br />
<p class="a"><span>&nbsp; </span>sn: Smith</p>
<br />
<p class="a"><span>&nbsp; </span>cn: Fran Smith</p>
<br />
<p class="a"><span>&nbsp;</span>&nbsp;cn: Frances Smith</p>
<br />
<p class="a"><span>&nbsp; </span>telephonenumber: 510-555-1234</p>
<br />
<p class="a"><span>&nbsp; </span>roomnumber: 122G</p>
<br />
<p class="a"><span>&nbsp; </span>o: Foobar, Inc.</p>
<br />
<p class="a"><span>&nbsp; </span>mailRoutingAddress: fsmith@foobar.com</p>
<br />
<p class="a"><span>&nbsp; </span>mailhost: mail.foobar.com</p>
<br />
<p class="a"><span>&nbsp; </span>userpassword: {crypt}3x1231v76T89N</p>
<br />
<p class="a"><span>&nbsp; </span>uidnumber: 1234</p>
<br />
<p class="a"><span>&nbsp; </span>gidnumber: 1200</p>
<br />
<p class="a"><span>&nbsp; </span>homedirectory: /home/fsmith</p>
<br />
<p class="a"><span>&nbsp; </span>loginshell: /usr/local/bin/bash</p>
<br />
<p><span style="font-family: 宋体">属性的值在保存的时候是保留大小写的，但是在默认情况下搜索的时候是不区分大小写的。某些特殊的属性（例如，</span><span lang="EN-US">password</span><span style="font-family: 宋体">）在搜索的时候需要区分大小写。</span></p>
<br />
<p><span style="font-family: 宋体">让我们一点一点地分析上面的记录项。</span></p>
<br />
<p class="a"><span lang="EN-US">dn: uid=fsmith, ou=employees, dc=foobar, dc=com</span></p>
<br />
<p><span style="font-family: 宋体">这是</span><span lang="EN-US">Fran</span><span style="font-family: 宋体">的</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">记录项的完整</span><span lang="EN-US">DN</span><span style="font-family: 宋体">，包括在目录树中的完整路径。</span><span lang="EN-US">LDAP</span><span style="font-family: 宋体">（和</span><span lang="EN-US">X.500</span><span style="font-family: 宋体">）使用</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">uid</span><span style="font-family: 宋体">（</span><span lang="EN-US">User ID</span><span style="font-family: 宋体">），不要把它和</span><span lang="EN-US">UNIX</span><span style="font-family: 宋体">的</span><span lang="EN-US">uid</span><span style="font-family: 宋体">号混淆了。</span></p>
<br />
<p class="a"><span>&nbsp; </span>objectclass: person </p>
<br />
<p class="a"><span>&nbsp; </span>objectclass: organizationalPerson </p>
<br />
<p class="a"><span>&nbsp; </span>objectclass: inetOrgPerson </p>
<br />
<p class="a"><span>&nbsp; </span>objectclass: foobarPerson</p>
<br />
<p><span style="font-family: 宋体">可以为任何一个对象根据需要分配多个对象类型。</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">person</span><span style="font-family: 宋体">对象类型要求</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">cn</span><span style="font-family: 宋体">（</span><span lang="EN-US">common name</span><span style="font-family: 宋体">）和</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: 'Courier New'">sn</span><span style="font-family: 宋体">（</span></p>
&nbsp;
 <img src ="http://www.blogjava.net/yifeng/aggbug/229406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-09-17 13:44 <a href="http://www.blogjava.net/yifeng/archive/2008/09/17/229406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>