This chapter is from the book

This chapter is from the book

This chapter describes the Active Directory data model and the way in which
the rules of the schema enforce it. You can approach this chapter with the
following three purposes:

To understand better how Active Directory works behind the
scenes

To enhance administration by learning, for example, which attributes are
indexed to make searches faster

To learn the technical background to extend the schema of your forest and
to prepare you for the next chapter about schema extensions

This chapter has the following sections:

Overview of the Active Directory data model

Schema in general

Classes

Attributes and syntaxes

Overview of the Active Directory Data Model

Active Directory uses the LDAP data model, which is derived from the X.500
data model and, consequently, Active Directory implements many of X.500
features. However, Active Directory is not a full X.500 directory service.

In this first section we introduce the Active Directory data model, including
most notably classes and attributes, as well as their relationship to the normal
user and other objects that you see in your domains.

Classes, Objects, and Attributes

As you know, information in Active Directory is represented as objects, and
there is an object for each user, computer, printer, and so on. Objects of the
same type belong to the same class, so all user objects belong to the
class user, all computer objects to the class computer, and
all printer objects to the class printQueue.

You also know that information in an object is stored as values of various
properties, which the corresponding class supports. For example, a user
may have a phone number and home folder, whereas a printer might have knowledge
about supported forms or print speed. Because this chapter is about the inner
architecture of Active Directory, we want to use the slightly fancier term
attribute instead of property. You can use these two words
interchangeably.

The schema dictates which object classes and attributes a given
forest supports. The base schema that ships with Windows 2000 supports
142 object classes and 863 attributes for those classes. The user class
uses 207 attributes of the pool of 863. Active Directory implements most of the
X.500 standard classes, but not quite all. The classes that it does not
implement are alias, strongAuthenticationUser, and
groupOfUniqueNames.

NOTE

The attribute pool is common to all classes. The description
attribute, for example, may be used by several classes (actually, all classes
use it).

Bringing in another fancy term, you could say that each object is an
instantiation of the corresponding class. For example, the Jack Brown
object is an instantiation of the user class. Just as the class
contains a number of attributes, the instantiated object contains the values for
those attributes. However, only some of the attributes for a class are
mandatory, which means that they must contain a value (a
single-valued attribute such as homePhone) or values (a
multivalued attribute such as otherHomePhone). Most of the
attributes for a given class are optional; that is, they may contain a
value, but more often they don't. Figure 8.1 shows these relationships.

Figure 8.1 The class user defines 7 mandatory and 200
optional attributes for which any user object must or may contain
values.

NOTE

You can see only a small subset of object types in the Users and Computers
snap-in and only a subset of attributes for each object.

NOTE

To create user objects with the Users and Computerssnap-in, you
must enter the user principal name (i.e., user logon name), even though it is
just an optional attribute behind the scenes.

Each attribute has one of 23 syntaxes, such as Integer 14,
Unicode string "abc", or Generalized time 04/26/2000
2:59:01 PM. We discuss syntaxes later in this chapter.

As you see in Figure 8.2, some of the classes (actually, most of them) are
something other than the familiar users, groups, and computers.

Figure 8.2 Each of the 142 classes uses a number of attributes, which in
turn use a certain syntax.

Container and Leaf Objects

Active Directory objects of some classes are container objects, and
the objects of the remaining classes are leaf objects. If you
compare this to a file system, container objects correspond to folders and leaf
objects correspond to files. We call these two types of classes container
classes and leaf classes.

One obvious example of a container class is organizationalUnit.
There are also many others, however, because a total of 56 classes of the base
schema are container classes and 86 are leaf classes. Interestingly,
user is also a container class; user objects may contain
nTFRSSubscriptions and classStore objects.

NOTE

"Container" can also mean a specific classone of the 56
container classes is called container. Two examples of this class are
CN=Users and CN=Computers, which you see with the Users and
Computers snap-in under any domain.

Even though the base schema contains 86 leaf classes, those classes are not
doomed to "eternal leafhood." You can modify the schema to make a leaf
class a possible superior (i.e., a parent) to some other class. When you do so,
a former leaf class (except for schema objects) becomes a container class.

One difference in our file system analogy is that in Active Directory both
containers and leafs contain data, whereas in a file system files contain data,
but folders don't.

NOTE

Just as there is a class called container, one of the 86 leaf
classes is called leaf. You can make also that class a container, so
one of your container classes could be called leaf.

Indexing and the Global Catalog

An Active Directory database can contain thousands or even millions of
objects. Therefore, we obviously need indexing to locate the right
object or objects fast. Of the base schema, 64 attributes are indexed, examples
being givenName, sn (Surname) and birthLocation.
Searching and retrieving objects via indexed attributes is naturally much faster
and efficient than using nonindexed attributes.

The global catalog helps in making local searches in a multidomain
forest. One hundred thirty-eight attributes of the base schema are part of the
global catalog, including cn, userPrincipalName,
givenName, sn (Surname), and
printStaplingSupported.