其实,关注论坛真的会带给技术人蛮多的思考点和写作点。这不,前一阵子我在两个不同论坛上看到了内容相似的一个问题,一个是来自于winos:http://bbs.winos.cn/thread-94121-1-1.html,另一个则来自微软官方论坛:http://social.technet.microsoft.com/Forums/zh-CN/windowsserversystemzhchs/thread/e64bdc7c-0bc4-4755-8457-e5f08b74e54d。因为提问者描述文字较多,所以这里请大家先自行进入链接阅读一下帖子内容。
  当我看完这两个帖子,脑子里很快过了一遍相关知识点,也不禁暗暗摇头,貌似活动目录方面确实没有现成的方式方法来满足提问者的需求。两个完全不同的域,它们之间的域目录分区只会在自己域的多台域控之间复制,而并不会被拷贝到其他域,即使它们在同一个林中。举例说明,就是A域的DC上新建了一个用户账号,它不会自动被复制到B域的DC上去,哪怕A域和B域是父子域,哪怕A域和B域是双向信任关系,这都不会发生。同一林中的域控只会去同步配置分区以及架构分区中的内容(配置分区中存储的是活动目录拓扑结构和相关元数据,架构分区中存储的是对活动目录中所有对象的类别及属性的定义)。所以,联想到这里,很多朋友给出的结论可能就是提问者的需求无法实现之类的了。
  不,不一定。我突然想到很早之前曾经接触过一款微软的身份认证、身份生命周期管理产品,MIIS(Microsoft Identity Integration Server)。我们用MIIS可以构建一个元目录(metadirectory),这个目录将分散在其他目录或数据库中的信息统一组织起来,并放在一个集中区域。元目录服务于其他目录,并建立一个链接以便于我们能够控制他们间的数据如何共享。例如,一个数据库中的数据修改可以自动被同步到与之关联的其他数据库。在微软对旗下产品的定义中,MIIS主要执行以下工作:
1. 账号的发布与回收
2. 目录同步
3. 认证信息的集成与管理
  对MIIS,它能够服务的对象不止是活动目录,还包括了活动目录应用程序模式ADAM、NT 4.0、Exchange全局通讯簿(GAL)、Novell eDirectory、Oracle 8i和9i、Lotus Notes / Domino、SQL 7 / 2000、SunOne / iPlanet / Netscape、IBM Informix、dBase等等。比如我在exchange的相关版块中最常见到的就是有工程师利用MIIS来同步多个邮件域的GAL或者做Lotus Notes到exchange的帐户迁移。于是,我翻开MIIS的帮助文档,并且寻找到了其中几段文字和几副示意图:
clip_image001
(图一)
图一为我们展示了一个新建用户对象时的MIIS处理模型。可以看到,当一个新的用户帐号被添加到数据库(/活动目录数据库)DataSource1中以后,MIIS先从中拷贝数据将其转储于metaverse(您可以将metaverse理解为元目录数据库中存放身份认证信息的表)中,随后从metaverse再provision给其他的数据源。
clip_image002
(图二)
图二是另外一种常见模型。当几个数据源中已经同步有一个用户对象时,在其中一个数据源中对对象属性做修改都可以传播到其他数据源中的相应位置(图中示例的是用户MikeD的title属性值由district manager变化为vice president)。
  看来,用MIIS来解决前面帖子中的用户需求应该是可行的,甚至可能会超出了我们预想的那么好,因为它不止可以同步两个活动目录数据库的新增用户帐号信息,在已存在的用户帐号属性发生变化时,它依然能够进行精细粒度的增量更新,甚至是用户密码同步。这让做为系统工程师的我们会得到与同一个域内DC之间同步极为相似的体验感。
  OK,那么就为有需求的那几个用户推荐说明一下吧。
  ……
  哦,不急不急,MIIS是如此的强大(虽然上文并未过多地介绍其他功能),自然是需要向微软付费购买才能使用的。但是比较不幸的消息是,MIIS完整版授权费用比较的高昂(有兴趣的朋友可以联系一下当地的软件供应商问问看),另外,试用版的MIIS在当下也不是那么的好找了(当然,如果您有technet或者msdn订阅那就好办了),即使您找到了,180天试用完毕后呢?
  所以,这里,特别地介绍给大家,IIFP(Identity Integration Feature Pack)这款产品。
  与其称IIFP为一款产品,不如称它为一个特性包(Package),一个功能补丁。它其实就是MIIS的一个简化版(非主流叫法:“阉割版”,呵呵),它只能提供AD活动目录,ADAM和Exchange数据库的身份认证集成与同步。但是,最重要的是,IIFP是免费的,您可以在下面的地址中下载到它:http://www.microsoft.com/downloads/details.aspx?FamilyID=d9143610-c04d-41c4-b7ea-6f56819769d5&displaylang=en
  那么,从这里开始,我将要向您演示的就是如何使用IIFP来实现我们前面看到的用户需求。
  毫无例外,配置之前需要先安装,安装之前先要检查是否满足软硬件条件。
  IIFP对硬件要求并不高,在软件方面呢,需要:
  Microsoft? Windows? Server 2003, Enterprise Edition
  Microsoft? .NET Framework 2.0
  Microsoft? SQL Server? 2000, Enterprise Edition, Standard Edition, or Developer Edition, with Service Pack 3a (SP3a), or
  2005, Enterprise Edition, Standard Edition, or Developer Edition (32-bit or 64-bit) (with Service Pack 1 recommended).
  可以看到,服务器操作系统需要是windows server企业版,然后后台要有一个SQL数据库,我实验环境中使用的是MS SQL server 2008 企业版,也是没有问题的。
  当然了,现在基本上的微软产品都是开发在.net框架之上的,所以首先要安装.netframework2.0了。
  对于IIFP的安装过程,我这里会伴着截图并挑出最关键的一些地方加以说明。
  我的目标是利用IIFP来同步一个名为contoso.com的域中的一个OU内容到另一个名为northwind.com的域中。受限于实验环境,我需要将IIFP安装在contoso.com的PDC上,生产环境中建议使用别的服务器承载IIFP或者单独建置一台IIFP服务器。
1. 在确认具备了所有软硬件条件后,点击IIFP的安装文件,安装包自解压到一个指定目录下,然后会出现很熟悉的安装界面,
clip_image003
没有什么好说的,点击Install Identity Integration Feature Pack .
2. 出现配置向导的的欢迎界面,直接点击“Next”
3. 照例弹出用户接受授权协议的窗口,当然选择同意。
4. 在安装类型选择界面中选择完全安装(complete),下一步
5. 出现数据储存的选择界面,需要输入我们后台SQL数据库的相关信息,
clip_image004
SQL数据库也就是最终IIFP存放metaverse的地方。
6. 随后要求输入IIFP使用的服务帐号,这个帐号是需要在活动目录中先建立好的,并且需要加入到IIFP所安装的服务器的本地系统管理员组中(administrators)
clip_image005
指定好服务帐号,密码及其所在域以后,点击下一步。
7. 出现一个关于IIFP所要用到的组的信息界面,并且里面的内容系统已经自动帮我们配置好了,不用修改,保持默认即可
clip_image006
8. 提示已经准备好了安装前的设置,可以开始安装,点击“start”
9. 如果是将IIFP安装在一台域控制器上(正如我本文所做的一样),会出现一个警告窗口,
clip_image007
这是因为IIFP设计中并不推荐它所使用的服务帐号是域管理员的身份。我在step 6中也提到了,需要把IIFP服务帐号加入要安装IIFP的服务器上的本地管理员组中,而加入域控上的administrators组则意味着成为了拥有至高无上权利的域管理员。这样会存在一定的安全隐患。所以在生产环境中还是建议给IIFP另起个炉灶。
由于实验环境,可以忽略它,点击OK
10. 接着又出现一个警告框,大意是告诉我们需要指定一个位置来存储IIFP密钥集的备份
clip_image008
点击OK
11. 选择一个位置并输入文件名,系统将保存一个bin类型的密钥集副本文件
clip_image009
12. 飞快的安装过程,点击finish完成IIFP的安装。
13. 又出现一个提示窗口,说明需要注销重登录后系统的安全组等等的设定才会生效,点击Yes即刻注销
clip_image010
重新登录后,可以在ADUC中看到前面配置中的多个安全组已经自动建立,
clip_image011
简要的对这几个组做一下说明,
MIISAdmins:这个组的成员对IIFP有完全控制权限,能够访问IIFP中的一切数据。
MIISBrowse:这个组的成员具有使用查询操作来收集用户帐号信息的权限。
MIISJoiners:这个组的成员可以通过Identity Manager访问Joiner和Metaverse Search,在Joiner中MIISJoiners组成员可以join或者project disconnectors,在Metaverse Search中可以查看对象属性或者从Metaverse中断开对象连接。
MIISOperators:这个组的成员权限最低,只有在Identity Manager里的Operations界面下查看操作执行记录的权限而已。
(PS:如果你不知道这段定义中的一些英文关键字,别急,没关系,本文后面会做进一步的联合说明。)
来到数据库服务器上查看,对应的数据库instance也已经建立了出来。
clip_image012
 
至此,对IIFP的安装部分可以算是告一个段落。
装好了以后自然是很想检验一下战果,
找到下图位置,
clip_image013
点击“Identity Manager”,正式进入IIFP的用户管理界面。
clip_image015
一眼看上去,位于此界面上方比较醒目的是几个大的标签,
clip_image016
我们要配置的部分也就集中在这几个标签卡中。
这里先大概对这几个标签做一下说明。
 
Operations
在点击这个标签后看到的界面,是关于所有的Management Agents运行或者别的作业执行时(/后)的记录。你可以在这个界面里中断,清除,或者重新执行IIFP的工作任务。
clip_image018
(因为这里我才新建的IIFP,并没有配置和执行任何任务作业,所以大家看到的是比较空白的样子,待我在后面做些操作后会再截图出来,届时会看到很多记录。)
 
Management Agents
相信很多IT Pro对MA这个东西已经比较熟悉了,现在有各种各样的MA出现在了微软不同产品的配置里,比如SCOM,比如DPM,虽然具体内容可能不尽相同,但是它的功能基本都是一样的,就是此产品和服务对象之间沟通的桥梁。对于本文中的IIFP,MA就是它和连接上的某个AD域(data source or target)之间的数据传递通道。MA负责将数据从Data Source移动到IIFP数据库中,也可以将数据从IIFP数据库移动到Target数据库中去。
clip_image020
做为IIFP配置的最最重要的一块,我后面会对MA这部分进行更多更详细的讲解。
 
Metaverse Designer
与其他两个初始界面中看到的不太一样,在Metaverse Designer下已经存在了很多内容,如下图所示,
clip_image022
可能经常玩活动目录的朋友对这张图上的字眼都会感到非常熟悉,是的,这其实是Metaverse存储在SQL server中的架构信息,我们在活动目录中也能从对象属性或者架构分区中看到类似的信息。通过这个管理界面,可以添加,修改,删除对象类型和属性,甚至是控制哪些属性要被索引,众所周知,索引可以大大提高数据库处理数据的性能。
 
Metaverse Search
clip_image024
这部分很好理解,如图所示,你可以通过定义一些比较和查找条件来搜索存储在SQL数据库中的对象和它们的属性。并且,你还可以更细节地查看是哪个MA创建出的对象,这些个对象被何时修改过,等等等等。
 
Joiner
Joiner这个管理接口是用来查找和查看disconnector对象的,disconnector是在connect space(connect space 是对象及其属性信息进入MA或者从MA出去之前的中转站)中未被连接到Metaverse中现有对象的一种对象(object)。然后可以通过Joiner来修改disconnector object或者手动方式join or project它。
 
(其实在MIIS/IIFP的知识体系中,有非常多的概念点。而这方面的中文资料几乎没有,所以要搞清楚这些知识点建议大家就是去读MIIS/IIFP的帮助文档。
这里我也尽可能的控制了需要提到的这些概念的范围,否则光是铺陈这些知识怕是写几百页也不够的。另外很多知识点在本文的主题中无关轻重的,也会一带而过,避免过多地干扰到读者。还是那句话,如果你对更多关于MIIS/IIFP的内容感兴趣的话,它的help文档相信会是你的不二选择。)
 
大概熟悉了IIFP的相关概念和图形化管理工具以后,后面要做的,便是去配置它。我会在下篇文章中讲述如何创建MA来实现contoso.com和northwind.com这两个毫无关系的域之间的对象属性的同步。
敬请期待!