Comment puis-je interroger Active Directory à partir de SQL Server 2005?Interrogation d'Active Directory à partir de SQL Server 2005
Répondre
Question assez générale mais voici quelques pointeurs.
Vous avez besoin d'un serveur lié créant sur SQL Server qui pointe vers ADSI (Active Directory Service Interface) quelque chose comme ça le fera.
EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 'ADSDSOObject', 'adsdatasource'
Ensuite, vous pouvez utiliser le type de requête suivant.
SELECT *
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName
FROM ''LDAP://DC=MyDC,DC=com,DC=uk''
WHERE objectCategory = ''Person''
AND objectClass = ''user'')
Vous devez définir le LDAP: // ligne appropriée (demandez à votre administrateur AD pour les détails) et être conscient que adhoc distribué des requêtes en utilisant OpenQuery sont désactivées par défaut dans SQL Server. Une fois que vous avez ce qui précède, il devrait être assez facile de google pour des variations particulières.
Oui.
serveur lié:
EXEC master.dbo.sp_addlinkedserver
@server = N'ADSI',
@srvproduct=N'Active Directory Services',
@provider=N'ADsDSOObject',
@datasrc=N'Servername.domain.com'
Requête:
select * from openquery
(
ADSI,'SELECT name
FROM ''LDAP://Servername.domain.com''
WHERE objectCategory = ''Person'' AND objectClass = ''user''
')
Il y a beaucoup d'exemples si vous le serveur de recherche et Linked LDPA sur Google. Je dis cela parce que LDAP peut être assez compliqué à utiliser.
Afin de surmonter la limite maximale de 1000 enregistrements renvoyés à la fois à partir des requêtes Active Directory, vous pouvez utiliser la fonction que j'ai écrite ci-dessous.
CREATE FUNCTION [dbo].[tf_GetAllUsersFromActiveDirectory]
()
RETURNS
@USERS TABLE
(
sAMAccountName VARCHAR(25) PRIMARY KEY CLUSTERED
, givenName VARCHAR(200)
, SN VARCHAR(200)
, userAccountControl VARBINARY(8)
, mail VARCHAR(200)
)
AS
BEGIN
INSERT INTO @Users
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=A*)(sAMAccountName=B*)(sAMAccountName=C*)(sAMAccountName=D*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=E*)(sAMAccountName=F*)(sAMAccountName=G*)(sAMAccountName=H*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=I*)(sAMAccountName=J*)(sAMAccountName=K*)(sAMAccountName=L*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=M*)(sAMAccountName=N*)(sAMAccountName=O*)(sAMAccountName=P*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=Q*)(sAMAccountName=R*)(sAMAccountName=S*)(sAMAccountName=T*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=U*)(sAMAccountName=V*)(sAMAccountName=W*)(sAMAccountName=X*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=Y*)(sAMAccountName=Z*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
RETURN
END
GO
Juste une note; pour supprimer le lien utiliser
exec sp_dropserver 'ADSI';
Merci de mentionner cela! – Calanus
- 1. Interrogation Active Directory avec "SQL"?
- 2. Groupes Active Directory avec SQL Server 2005
- 3. Obtention du champ de description à partir d'Active Directory dans SQL Server 2005 (LDAP)
- 4. connexion SQL Server 2005 à partir d'Oracle
- 5. Interrogation d'Active Directory à l'aide de VBScript
- 6. SQL Server 2005: Importation de données à partir de SQL Server 2000
- 7. SQL Server interrogation XML à l'aide d'un curseur
- 8. Extraction d'heures à partir d'un DateTime (SQL Server 2005)
- 9. Rétrogradation de SQL Server 2008 vers SQL Server 2005
- 10. synchroniser deux SQL Server 2005
- 11. Interrogation plusieurs bases de données sur SQL Server
- 12. SQL Server 2005 Replication
- 13. SQL Server 2005 Date Localisation
- 14. SQL SERVER 2005
- 15. SQL Server 2005 xp_cmdshell
- 16. SQL Server 2005: Refuser l'accès à sp_prepexec
- 17. Ruby Connexion à SQL Server 2005
- 18. Sauvegarde MS SQL Server 2005?
- 19. Génération rapide de scripts SQL Server 2005
- 20. Créer XML à partir de données SQL Server 2005 à l'aide de FOR XML
- 21. fonction de partition dans SQL Server 2005
- 22. PHP avec SQL Server 2005+
- 23. Requêtes XML SQL Server 2005
- 24. SQL Server 2005 Browser Serivce
- 25. Modification du SQL Server 2005 Server
- 26. SQL Server 2005 et APP_DATA
- 27. SQL Server 2005 Restauration Hanging
- 28. XML et Sql Server 2005
- 29. Impossible de se connecter à SQL Server 2005 Db à partir du service Windows Vista x64
- 30. Connexion à SQL Server 2005 à partir de Perl et exécution d'un SELECT
Le lien vers AD est-il en lecture seule, ou pouvez-vous Insérer via cette voie aussi? – Kristen
Non, c'est Select uniquement, mais vous pouvez utiliser le modèle d'objet COM ADSI pour créer des utilisateurs. Il y a une intro ici http://fr.csharp-online.net/User_Management_with_Active_Directory –