1.为什么叫做活动目录
刚刚接触活动目录这个名词的时候,一下就被搞蒙了,不知道活动目录和一般的windows目录(文件夹)有什么区别,它怎么就是活动的了,通过一段时间的学习,搞清楚了这些。
文件夹仅代表一个文件存在磁盘上的位置和层次关系,一个文件生成之后相对来说这个文件的所在目录也就相对固定了,也就是说它的属性也就相对固定了,是静态的。这个目录所能代表的仅是这个目录下所有文件的存放位置和所有文件总的大小,并不能得出其它有关信息,这样就影响到了整体使用目录的效率,也就是影响了系统的整体效率,使系统的整个管理变得复杂。
活动目录之所以称做“活动的”是因为它可以做到“由此及彼”的联想、映射,如找到了一个用户名,就可联想到它的账号、出生信息、E-mail、电话等所有基本信息,虽然组成这些信息的文件可能不在一块。同时不同应用程序之间还可以对这些信息进行共享,减少了系统开发资源的浪费,提高了系统资源的利用效率。
活动目录包括两个方面:目录和与目录相关的服务。目录是存储各种对象的一个物理上的容器,从静态的角度来理解这活动目录与我们以前所结识的“目录”和“文件夹”没有本质区别,仅仅是一个对象,是一实体;而目录服务是使目录中所有信息和资源发挥作用的服务,活动目录是一个分布式的目录服务,信息可以分散在多台不同的计算机上,保证用户能够快速访问。
活动目录主要用在分布式的环境中。在分布式环境中,要求有各种信息可以被各种应用很方便地访问读取。活动目录正式为分布式环境中的信息提供一种访问途径。它提供了一个公共的区域来保存分布式环境中的各种信息,并且对这些信息进行定位。从开发人员角度看活动目录,可以理解活动目录是一种存放了应用程序所需要的特定资源信息的“数据库”。活动目录还对这些资源信息的读取和查询进行了优化。
2.活动目录基本术语
2.1对象
活动目录的信息实体,可以使一个用户,一台打印机或者是一个网络共享。对象包含描述它们的必选属性和可选属性。
2.2容器和非容器
活动目录中的资源信息被组织成一个层次结构。这个层次结构中的每一个实体都被简称为对象。换句话说,活动目录中创建对象时,是把它们创建在一个层次结构中的。该结构由两种类型的对象组成:Container(容器)和非Container(非容器)。容器可容纳非容器或下一级的容器。而非容器则不再包含其他对象,因此也常被成为叶或叶子对象。在安装完活动目录后,操作系统已经默认自动创建了很多的Container,如Users, Builtin等。
2.3ADsPath、DN、RDN
在活动目录中层次结构的路径被称为ADsPath,可用来唯一标志一个对象(另外唯一标志对象的方法是使用GUID)。ADsPath常用的表示为:LDAP://DC=microsoft,DC=com。例如,有域被命名为mydomain.local,则它的ADsPath表示为:LDAP://DC=mydomain,DC=local。其中DC是Domain Component(域组件)的缩写,它只用于表示域的根。DN是Distinguished Name(唯一标识)的缩写,RDN是Relative Distinguished Name(相对唯一标识)的缩写。DN用来在一个完整的目录信息树中唯一表示一个对象的名称,而RDN是指在该对象的父容器中唯一表示它的名称。下面看个示例:在mydomain.local域中用户容器中超级管理员帐号的ADsPath为:LDAP://CN=Administrator,CN=Users,DC=mydomain,DC=local,其DN为(注意没有了LDAP:// 这个前缀):CN=Administrator,CN=Users,DC=mydomain,DC=local,其RDN为(即在Users容器中的名称):CN=Administrator。其中CN是Common Name(公用名称)的缩写.
3.安装活动目录
在Server 2003点开始-》运行输入dcpromo就可以进入安装向导,卸载向导也是同样的命令。
4.使用C#.net访问活动目录
1.添加DirectoryServices引用
2.Example
using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace ADDemo
{
class Program
{
/// <summary>
/// 获取
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
DirectoryEntry de = new DirectoryEntry("LDAP://CN=Users,DC=tiger,DC=com");
Console.WriteLine("Name: " + de.Name);//获取Common Name(公用名称)
Console.WriteLine("Path: " + de.Path);//获取AdsPath 用来唯一标识一个域中的对象
Console.WriteLine("Guid: " + de.Guid);//获取其Guid可以唯一标识
Console.WriteLine("UserName: " + de.Username);
Console.WriteLine("Type: " + de.SchemaClassName);
Console.WriteLine("NativeGuid: " + de.NativeGuid);
foreach (DirectoryEntry obj in de.Children)
{
//Console.Write("Name:{0}\t",obj.Name);
Console.WriteLine("Path: " + obj.Path);
}
Console.ReadKey();
}
}
}