17.2 Interoperating with Other Directories
Now that we've covered what Microsoft is doing with
their directory products, let's review some of the
issues around integrating a mixed directory environment. As we
mentioned earlier, supporting multiple directories within a large
organization is a necessary practice. You may already have several
directories deployed, some of which are not Microsoft-based. A common
question in this scenario is how to get your directories to work
together.
17.2.1 Getting Data from One Directory to Another
Perhaps the most common use of a directory is to access employee,
customer, or student information. One of the problems of supporting
multiple directories is that for each directory to be useful, it
needs to store similar data. It would be very helpful if there were a
standard RFC that defined a replication scheme for LDAP directories,
but unfortunately there is not. As a result, each directory vendor
has implemented their own way to replicate data between servers. This
is where metadirectories come into play. The primary purpose of a
metadirectory is to facilitate data flow and provisioning across
systems. If you have several directories, and writing your own
scripts to replicate data is not a possibility, implementing a
metadirectory is a valid option.
17.2.2 Using Common Tools Across Directories
One of the
biggest reasons for not wanting
to implement multiple directories is that they have to be managed
differently. Fortunately, both Active Directory and AD/AM are based
on LDAP, so any of the standard LDAP SDK tools such as
ldapsearch and ldapadd will
work. Also, the Microsoft LDP tool, a graphical user interface for
querying and managing content in Active Directory, has become very
popular. LDP is an LDAP-based tool and works against any LDAP
directory. The same cannot be said for tools such as ADSI Edit and
the Active Directory administrative snap-ins, which works only with
Active Directory.
One popular approach for managing content in SunONE and OpenLDAP
directories is to use the LDAP Data Interchange Format (LDIF). LDIF
has a strict format that is both human- and machine-readable, but it
is easy to work with. Microsoft provides the LDIFDE program on the
Windows Server platforms, which allows for importing and exporting
LDIF files. You can also use an LDIF-based tool on a non-Windows
platform to manage content in Active Directory.
17.2.3 Porting Scripts to Work Across Directories
The story for
porting scripts is much the
same as the one for using similar tools for managing different
directories. Most directories today are LDAP-based, so if your
scripts are using an LDAP API, they should work regardless of what
directory is being used. That said, there are some fairly significant
differences with how Active Directory was implemented that may cause
problems in your scripts. Most LDAP directories, including AD/AM,
have a flat namespace. That means you can make a single query to a
server and retrieve all objects the server knows about. With Active
Directory, it is a little different in multidomain environments. When
you implement multiple domains, you are essentially segregating your
LDAP namespace. A domain controller knows about only the objects in
its domain. For this reason, Microsoft designed the Global Catalog so
that you can perform a single query to search against all objects in
a forest, but the GC contains only a subset of information for all
objects. The impact to scripts may be less than obvious, but to
perform a query such as retrieving all attributes for any user in the
forest that has a department equal to
"Sales", you first must query the
GC. To then retrieve all defined attributes for each user, you have
to run separate queries against the domains the users are in. The
other option is to skip the GC and query the domains individually,
but regardless this simple task can require several queries.
17.2.4 Making Searches Across Directories Seamless
If you foresee supporting
multiple directories, you might have
the notion of trying to unify the namespace used by each. So perhaps
your Active Directory root is dc=mycorp,dc=com and
you have an OpenLDAP server that has a root at
dc=apps,dc=mycorp,dc=com. You can create referral
objects using the crossRef objectclass so that a
query for dc=apps,dc=mycorp,dc=com against an
Active Directory domain controller will refer the client to an
OpenLDAP server. The LDIF representation of the referral object looks
like the following, where nCName is the name of
the partition and dNSRoot is the hostname to refer
clients too:
dn: cn=OpenLDAP,cn=Partitions,cn=Configuration,dc=mycorp,dc=com
objectclass: crossRef
nCName: dc=apps,dc=mycorp,dc=com
dNSRoot: openldap.mycorp.com
An issue with using referrals to access data in different directories
is that clients from each directory typically can't
authenticate in each. Unless you are synchronizing user accounts and
passwords between directories or you allow anonymous binds, when the
referral passes to the OpenLDAP server, the query will fail due to a
logon failure.
|