Extraire la liste des membres d’un groupe AD Microsoft Active Directory défini dans un serveur Microsoft SQL Server

Logo

Introduction

Très souvent, les responsables de projet, ne disposant pas des outils nécessaires ou par méconnaissance, demandent directement aux DBA la liste des comptes appartenant à un groupe Microsoft Active Directory défini dans un serveur Microsoft SQL Server. Voici, dans cet article, la liste des commandes utiles (net group, net user) permettant de lister les membres sans déranger les administrateurs du contrôleur de domaine Active Directory (AD).

Dans cet article, le groupe <mondomaine>\fr.trading.rog est défini dans le serveur SQL Server 2008 R2 SRVWINFR122. Ce groupe a les droits de lecture seule dans la base trading grâce au rôle SQL Server prédifini db_datareader :

Liste compte groupe AD SQL Server
CREATE LOGIN [<mondomaine>\fr.trading.rog]
FROM WINDOWS WITH DEFAULT_DATABASE=[trading],
DEFAULT_LANGUAGE=[us_english]
GO

use [trading]
GO<

CREATE USER [<mondomaine>\fr.trading.rog]
FOR LOGIN [<mondomaine>\fr.trading.rog]
GO

execute sp_addrolemember 'db_datareader',[<mondomaine>\fr.trading.rog]
GO

Lister les membres d’un groupe AD avec net group

Dans une invite de commandes DOS, la commande net group liste les membres d’un groupe Microsoft AD dans le domaine, pour rechercher les membres du groupe AD "fr.trading.org" dans le domaine courant :

net group /domain "fr.trading.rog"
La demande sera traitée sur contrôleur de domaine du domaine <mondomaine>.

Nom de groupe     fr.trading.rog
Commentaire

Membres

------------------------------------------------------------------
DOEJ                 MARTINS                 DURANDP

La commande s'est terminée correctement.

La commande liste l’intégralité des comptes utilisateurs AD défini dans le groupe, ici 3 comptes sont définis.

Extraire le détail des membres d’un groupe AD avec net user

Pour aller encore plus loin, toujours dans une invite de commandes DOS, la commande net user permet d’obtenir le détail pour chaque compte AD dans le groupe "fr.trading.org" (nom, prénom…). Pour obtenir le détail du compte DOEJ défini dans le groupe "fr.trading.org" :

net user /domain "DOEJ"
La demande sera traitée sur contrôleur de domaine du domaine <mondomaine>.

Nom d'utilisateur                              DOEJ
Nom complet                                    DOE John
Commentaire                                    Trader
Commentaires utilisateur
Code du pays                                   (null)
Compte : actif                                 Oui
Le compte expire                               Jamais
 ...                                            ...

Rechercher si un compte AD est membre d’un groupe AD avec les commandes net group et find

En combinant les commandes net group et find dans une invite de commandes DOS, il est possible de déterminer très rapidement si le compte DOEJ est bien défini dans le groupe "fr.trading.rog" :

net group /domain "fr.trading.rog" | find /I /C "DOEJ"
1
  • L’option /I de la commande find ignore la casse.
  • L’option /C de la commande find indique de n’afficher que le nombre de résultats : si la valeur vaut 1, le compte AD DOEJ est membre du groupe.

Conclusion

Les commandes net group et net user permettent de lister très rapidement la liste et le détail des comptes AD définis dans un groupe AD référencé dans un moteur SQL Server. Ces commandes ont 3 avantages précieux :

  • Elle sont disponibles sur les postes de travail (workstations) ou sur les serveurs.
  • Elles peuvent être utilisées facilement par des utilisateurs avancés qui ne disposent pas des outils nécessaires pour interroger l’annuaire LDAP Microsoft Active Directory.
  • Elles évitent de déranger les administrateurs du contrôleur de domaine Microsoft Active Directory AD.

Il existe d’autres méthodes (dsquery, dsget, PowerShell, ldapsearch…) mais avec 3 inconvénients possibles, inconvénients listés ci-dessous :

  • L’installation de composants supplémentaires (Windows SDK par exemple) est nécessaire.
  • Les lignes de commandes sont trop complexes même pour des utilisateurs avancés (PowerShell notamment).
  • Certaines méthodes ne sont disponibles que sur les serveurs et pas sur les postes de travail (Workstations).

Les commandes net user/group ne peuvent pas remplacer un client LDAP digne de ce nom pour des recherches complexes (filtres sur les OU…). Ce point est souligné car la question devient récurrente. Elles sont pratiques quand on a rien d’autre sous la main pour répondre rapidement à la question "Qui peut accéder à ma base de données SQL Server ?" d’un responsable de projet ou d’applications.

Exemple avec le client ldapsearch : une recherche dans un contrôleur de domaine Microsoft Active Directory (serveur SRVDCTFR1, port 3268) sur la propriété sAMAccountName et l’OU "OU=FR,DC=mycompany,DC=intranet".

% ldapsearch -h SRVDCTFR1 -p 3268 -D "mycompany\smithj"
        -b"OU=FR,DC=mycompany,DC=intranet" -w<mot_de_passe> "sAMAccountName=doej"