Verteilte Abfrage
Da ADSI ein OLE DB-Anbieter ist, kann es an verteilten Abfragen teilnehmen, die in Microsoft SQL Server 7.0 eingeführt wurden. Folgende Szenarien sind möglich:
- Verknüpfen von Active Directory-Objekten mit SQL Server Daten.
- Aktualisieren SQL Daten aus Active Directory-Objekten.
- Erstellen von drei- oder vierstufigen Joins mit anderen OLE DB Anbietern. Beispiel: Indexserver, SQL Server und Active Directory.
Der OLE DB-Anbieter unterstützt zwei Befehlsdialekte, LDAP und SQL, um auf den Verzeichnisdienst zuzugreifen und Ergebnisse in tabellarischer Form zurückzugeben, die mit SQL Server verteilten Abfragen abgefragt werden können.
So starten Sie die SQL Query Analyzer
- Öffnen Sie zunächst den SQL Query Analyzer auf dem SQL Server, der mit dem Verzeichnisdienst verknüpft ist (siehe Erstellen eines Verbindungsservers).
- Ausführen der SQL Query Analyzer (Start Programs Microsoft SQL Server | | 7.0)
- Melden Sie sich beim SQL Server Computer an.
- Geben Sie die SQL Abfrage im Bereich Editor des Abfragefensters ein.
- Führen Sie die Abfrage durch Drücken von F5 aus.
Die folgenden Abschnitte enthalten weitere Details:
- Erstellen eines Verbindungsservers
- Erstellen einer SQL Server authentifizierten Anmeldung
- Abfragen des Verzeichnisdienstes (Directory Service)
Erstellen eines Verbindungsservers
Um einen verteilten Join für einen Windows 2000 Server-Verzeichnisdienst einzurichten, erstellen Sie einen Verbindungsserver. Richten Sie hierzu die ADSI-Zuordnung mithilfe der gespeicherten Systemprozedur sp _ addlinkedserver ein. Bei dieser Prozedur wird ein Name mit einem OLE DB Anbieternamen verknüpft.
Beachten Sie im folgenden Beispiel, dass es mehrere Argumente gibt, die mit der gespeicherten Systemprozedur sp _ addlinkedserver verwendet werden:
- "ADSI" ist das Serverargument und der Name dieses Verbindungsservers.
- "Active Directory Services 2.5" ist das srvproduct-Argument, das den Namen der OLE DB Datenquelle darstellt, die Sie als Verbindungsserver hinzufügen.
- "ADSDSOObject" ist das _ Anbieternamenargument.
- "adsdatasource" ist das _ Datenquellenargument, bei dem es sich um den Namen der Datenquelle handelt, wie er vom OLE DB-Anbieter interpretiert wird.
Der EXEC-Befehl wird verwendet, um gespeicherte Systemprozeszen auszuführen.
EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5',
'ADSDSOObject', 'adsdatasource'
GO
Für Windows authentifizierte Anmeldungen ist die Selbstzuordnung ausreichend, um mit SQL Server Sicherheitsdelegierung auf das Verzeichnis zuzugreifen. Da die Selbstzuordnung standardmäßig für Verbindungsserver erstellt wird, die mit sp _ addlinkedservererstellt wurden, ist keine andere Anmeldezuordnung erforderlich.
Für SQL Server authentifizierte Anmeldungen können Sie geeignete Anmeldungen und Kennwörter für die Verbindung mit dem Verzeichnisdienst konfigurieren, indem Sie die gespeicherte Systemprozedur sp _ addlinkedsrvlogin verwenden.
Hinweis
Verwenden Sie nach Möglichkeit die Windows-Authentifizierung.
Erstellen einer SQL Server authentifizierten Anmeldung
Wenn Sie lieber eine SQL Server-authentifizierte Anmeldung anstelle Windows-Authentifizierung verwenden möchten, fügen Sie dem Verbindungsserver eine Anmeldung hinzu (siehe vorheriger Abschnitt). Verwenden Sie hierzu die gespeicherte Systemprozedur sp _ addlinkedsrvlogin.
Im folgenden Beispiel gibt es mehrere Argumente, die mit der gespeicherten Systemprozedur sp _ addlinkedsrvlogin verwendet werden:
- "ADSI" ist das rmtsvrname-Argument, bei dem es sich um den Namen des Verbindungsservers handelt, der im vorherigen Beispiel erstellt wurde.
- "Fabrikam \ Administrator" ist das locallogin-Argument, bei dem es sich um den Anmeldenamen auf dem lokalen Server handelt und der SQL Server-Anmeldung oder ein Windows NT-Benutzer sein kann.
- "CN=Administrator,OU=Sales,DC=activeds,DC=Fabrikam,DC=com" ist das rmtuser-Argument, bei dem es sich um den Benutzernamen handelt, den Sie zum Herstellen der Verbindung verwenden, da useself false ist.
- "secret * * 2000" ist das rmtpassword, das dem Rmtuser zugeordnete Kennwort ist.
Der EXEC-Befehl wird verwendet, um gespeicherte Systemprozeszen auszuführen.
EXEC sp_addlinkedsrvlogin 'ADSI', false, 'Fabrikam\Administrator',
'CN=Administrator,OU=Sales,DC=activeds,DC=Fabrikam,DC=com', 'secret**2000'
Abfragen des Verzeichnisdienstes (Directory Service)
Nachdem Sie einen Verbindungsserver erstellt haben, verwenden Sie eine OPENQUERY-Anweisung, um eine Abfrage an den Verzeichnisdienst zu senden. Mit dem folgenden SQL Abfrage wird eine virtuelle Tabelle erstellt, in der die Abfrageergebnisse mithilfe der CREATE VIEW-Anweisung gespeichert werden. Die erstellte Ansicht heißt "viewADContacts".
Die erste SELECT-Anweisung definiert die Informationen, die vom Verzeichnisdienst abgefragt werden, und ordnet sie einer Spalte in der Tabelle zu. In Klammern eingeschlossene Informationen geben die Daten an, die in die virtuelle Tabelle aufgenommen werden. Die Informationen, die sich nicht in Klammern befinden, geben die Daten an, die vom Verzeichnisdienst abgerufen werden. Beachten Sie, dass auf die Informationen, die vom Verzeichnisdienst abgerufen werden, über den LDAP-Anzeigenamen verwiesen werden muss.
Die nächste Anweisung ist die OPENQUERY-Anweisung. Diese Anweisung verfügt über zwei Argumente: ADSI, d. h. den Namen des von Ihnen erstellten Verbindungsservers, und eine Abfrage-Anweisung. Die Abfrage-Anweisung enthält die folgenden Elemente:
- Die SELECT-Anweisung enthält die Liste der Daten, die vom Verzeichnisdienst abgerufen werden. Sie müssen den LDAP-Anzeigenamen verwenden, um anzugeben, nach welchen Daten Sie suchen.
- Die FROM-Anweisung enthält den Namen des Verbindungsverzeichnisservers, von dem diese Informationen abgerufen werden.
- Die WHERE-Anweisung stellt die Suchbedingungen bereit. In diesem Beispiel wird nach Kontakten gesucht.
Die endgültige SELECT-Anweisung wird verwendet, um ergebnisse aus der anzuzeigende Ansicht zu erhalten.
CREATE VIEW viewADContacts
AS
SELECT [Name], sn [Last Name], street [Street], l [City], st [State]
FROM OPENQUERY( ADSI,
'SELECT name, sn, street, l, st
FROM 'LDAP:// OU=Sales,DC=activeds,DC=Fabrikam,DC=Com'
WHERE objectCategory='Person' AND
objectClass = 'contact'')
GO
SELECT * FROM viewADContacts