Verteilte Abfrage

Da ADSI ein OLE DB-Anbieter ist, kann sie an verteilten Abfragen teilnehmen, die in Microsoft SQL Server 7.0 eingeführt wurden. Die folgenden Szenarien sind möglich:

  • Verknüpfen von Active Directory-Objekten mit SQL Server Daten.
  • Aktualisieren von SQL-Daten aus Active Directory-Objekten.
  • Erstellen von Drei-Wege- oder Vier-Wege-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-Abfrageanalyse

  1. Öffnen Sie zunächst die SQL-Abfrageanalyse auf der SQL Server, die mit dem Verzeichnisdienst verknüpft ist (siehe Erstellen eines Verbindungsservers).
  2. Ausführen der SQL-Abfrageanalyse (Start | Programme | Microsoft SQL Server 7.0)
  3. Melden Sie sich am SQL Server Computer an.
  4. Geben Sie die SQL-Abfrage im Bereich Editor des Abfragefensters ein.
  5. Führen Sie die Abfrage aus, indem Sie F5 drücken.

Die folgenden Abschnitte enthalten weitere Details:

Erstellen eines Verbindungsservers

Um einen verteilten Join in einem Windows 2000 Server-Verzeichnisdienst einzurichten, erstellen Sie einen Verbindungsserver. Richten Sie hierzu die ADSI-Zuordnung mithilfe der sp_addlinkedserver gespeicherte Systemprozedur ein. In diesem Verfahren wird ein Name mit einem OLE DB-Anbieternamen verknüpft.

Beachten Sie im folgenden Beispiel, dass für die sp_addlinkedserver gespeicherte Systemprozedur mehrere Argumente verwendet werden:

  • "ADSI" ist das Serverargument und der Name dieses Verbindungsservers.
  • "Active Directory Services 2.5" ist das Srvproduct-Argument , das der Name der OLE DB-Datenquelle ist, die Sie als Verbindungsserver hinzufügen.
  • "ADSDSOObject" ist das provider_name Argument.
  • "adsdatasource" ist das data_source Argument, das der Name der Datenquelle ist, wie er vom OLE DB-Anbieter interpretiert wird.

Der EXEC-Befehl wird verwendet, um gespeicherte Systemprozeduren auszuführen.

EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 
'ADSDSOObject', 'adsdatasource'
GO

Für Windows-authentifizierte Anmeldungen reicht die Selbstzuordnung aus, um mit SQL Server Sicherheitsdelegierung auf das Verzeichnis zuzugreifen. Da die Selbstzuordnung standardmäßig für Verbindungsserver erstellt wird, die über sp_addlinkedserver erstellt werden, 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 mithilfe der sp_addlinkedsrvlogin gespeicherten Systemprozedur konfigurieren.

Hinweis

Verwenden Sie nach Möglichkeit die Windows-Authentifizierung.

 

Erstellen einer SQL Server authentifizierten Anmeldung

Wenn Sie anstelle der Windows-Authentifizierung lieber eine SQL Server authentifizierte Anmeldung verwenden möchten, fügen Sie dem Verbindungsserver eine Anmeldung hinzu (siehe vorheriger Abschnitt). Verwenden Sie hierzu die sp_addlinkedsrvlogin gespeicherte Systemprozedur.

Im folgenden Beispiel gibt es mehrere Argumente, die mit der sp_addlinkedsrvlogin gespeicherten Systemprozedur verwendet werden:

  • "ADSI" ist das Rmtsvrname-Argument . Dabei handelt es sich um den Namen des Verbindungsservers, der im vorherigen Beispiel erstellt wurde.
  • "Fabrikam\Administrator" ist das Locallogin-Argument, bei dem es sich um die Anmeldung auf dem lokalen Server handelt und die SQL Server Anmeldung oder ein Windows NT-Benutzer sein kann.
  • "CN=Administrator,OU=Sales,DC=activeds,DC=Fabrikam,DC=com" ist das rmtuser-Argument , das der Benutzername ist, den Sie zum Herstellen einer Verbindung verwenden, da useselffalse ist.
  • "secret**2000" ist das rmtpassword, das dem rmtuser zugeordnete Kennwort ist.

Der EXEC-Befehl wird verwendet, um gespeicherte Systemprozeduren 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. Die folgende SQL-Abfrage erstellt mithilfe der CREATE VIEW-Anweisung eine virtuelle Tabelle, die Ihre Abfrageergebnisse enthält. 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. Informationen, die von Klammern umgeben sind, geben die Daten an, die in die virtuelle Tabelle eingefügt werden. Die Informationen, die nicht in Klammern enthalten sind, geben die Daten an, die aus dem Verzeichnisdienst abgerufen werden. Beachten Sie, dass auf die Informationen, die aus dem Verzeichnisdienst abgerufen werden, mit dem 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 verbindungsservers, den Sie erstellt haben, und eine Abfrageanweisung. Die Abfrageanweisung 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 Anzuzeigenden 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