Requête distribuée
Étant donné qu’ADSI est un fournisseur OLE DB, il peut participer à Distributed Query introduit dans Microsoft SQL Server 7.0. Voici les scénarios possibles :
- Jointure d’objets Active Directory avec des données SQL Server.
- Mise à jour des données SQL à partir d’objets Active Directory.
- Création de jointures triples ou quatre voies avec d’autres fournisseurs OLE DB. Par exemple, serveur d’index, SQL Server et Active Directory.
Le fournisseur OLE DB prend en charge deux dialectes de commande, LDAP et SQL, pour accéder au service d’annuaire et retourner les résultats sous une forme tabulaire qui peut être interrogée avec SQL Server requêtes distribuées.
Pour démarrer l’analyseur de requête SQL
- Tout d’abord, ouvrez l’Analyseur de requêtes SQL sur le SQL Server lié au service d’annuaire (voir Création d’un serveur lié).
- Exécuter l’analyseur de requête SQL (Démarrer | Programmes | Microsoft SQL Server 7.0)
- Connectez-vous à l’ordinateur SQL Server.
- Entrez la requête SQL dans le volet Éditeur de la fenêtre de requête.
- Exécutez la requête en appuyant sur F5.
Les sections suivantes fournissent plus de détails :
- Création d’un serveur lié
- Création d’une connexion authentifiée SQL Server
- Interrogation du service d'annuaire
Création d’un serveur lié
Pour configurer une jointure distribuée sur un service d’annuaire Windows 2000 Server, créez un serveur lié. Pour ce faire, configurez le mappage ADSI à l’aide de la procédure stockée système sp_addlinkedserver . Cette procédure lie un nom à un nom de fournisseur OLE DB.
Dans l’exemple suivant, notez que plusieurs arguments sont utilisés avec la procédure stockée système sp_addlinkedserver :
- « ADSI » est l’argument serveur et sera le nom de ce serveur lié.
- « Active Directory Services 2.5 » est l’argument srvproduct , qui est le nom de la source de données OLE DB que vous ajoutez en tant que serveur lié.
- « ADSDSOObject » est l’argument provider_name .
- « adsdatasource » est l’argument data_source , qui est le nom de la source de données tel qu’interprété par le fournisseur OLE DB.
La commande EXEC est utilisée pour exécuter des procédures stockées système.
EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5',
'ADSDSOObject', 'adsdatasource'
GO
Pour les connexions authentifiées par Windows, le mappage automatique est suffisant pour accéder au répertoire avec SQL Server délégation de sécurité. Étant donné que le mappage automatique est créé par défaut pour les serveurs liés créés via sp_addlinkedserver, aucun autre mappage de connexion n’est nécessaire.
Pour les connexions SQL Server authentifiées, vous pouvez configurer des connexions et des mots de passe appropriés pour la connexion au service d’annuaire à l’aide de la procédure stockée système sp_addlinkedsrvlogin.
Notes
Lorsque c'est possible, utilisez l'authentification Windows.
Création d’une connexion authentifiée SQL Server
Si vous préférez utiliser une connexion authentifiée SQL Server plutôt que l’authentification Windows, ajoutez une connexion au serveur lié (voir la section précédente). Pour ce faire, utilisez la procédure stockée système sp_addlinkedsrvlogin.
Dans l’exemple suivant, plusieurs arguments sont utilisés avec la procédure stockée système sp_addlinkedsrvlogin :
- « ADSI » est l’argument rmtsvrname , qui est le nom du serveur lié créé dans l’exemple précédent.
- « Fabrikam\Administrator » est l’argument locallogin, qui est la connexion sur le serveur local et peut être le SQL Server connexion ou un utilisateur Windows NT.
- « CN=Administrator,OU=Sales,DC=activeds,DC=Fabrikam,DC=com » est l’argument rmtuser , qui est le nom d’utilisateur que vous utilisez pour vous connecter, car useself est false.
- « secret**2000 » est le mot de passe rmtpassword, qui est le mot de passe associé à rmtuser
La commande EXEC est utilisée pour exécuter des procédures stockées système.
EXEC sp_addlinkedsrvlogin 'ADSI', false, 'Fabrikam\Administrator',
'CN=Administrator,OU=Sales,DC=activeds,DC=Fabrikam,DC=com', 'secret**2000'
Interrogation du service d'annuaire
Après avoir créé un serveur lié, utilisez une instruction OPENQUERY pour envoyer une requête au service d’annuaire. La requête SQL suivante crée une table virtuelle pour contenir les résultats de votre requête à l’aide de l’instruction CREATE VIEW . La vue créée est nommée « viewADContacts ».
La première instruction SELECT définit les informations interrogées à partir du service d’annuaire et les mappe à une colonne de la table. Les informations entourées de crochets indiquent les données placées dans la table virtuelle. Les informations qui ne sont pas entre crochets indiquent les données récupérées à partir du service d’annuaire. Notez que les informations récupérées à partir du service d’annuaire doivent être référencées par son nom d’affichage LDAP.
L’instruction suivante est l’instruction OPENQUERY . Cette instruction a deux arguments : ADSI, qui est le nom du serveur lié que vous avez créé, et une instruction de requête. L’instruction de requête contient les éléments suivants :
- L’instruction SELECT contient la liste des données qui seront obtenues à partir du service d’annuaire. Vous devez utiliser le nom complet LDAP pour indiquer les données que vous recherchez.
- L’instruction FROM contient le nom du serveur d’annuaire lié à partir duquel ces informations seront obtenues.
- L’instruction WHERE fournit les conditions de recherche. Dans cet exemple, il recherche des contacts.
L’instruction SELECT finale est utilisée pour récupérer les résultats de la vue à afficher.
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