認証された/バインドされたユーザー(または任意のユーザー)を含むグループにActive Directory LDAPクエリをフィルター処理するにはどうすればよいですか?これは正常に機能します。
(&(objectClass=group)(member=*))
>>> lots of results
しかし、これ以上詳しく説明することはできません。
(&(objectClass=group)(member=*S*))
>>> nothing
MSDNは、次のようなフィルターの使用について言及しています。
(member:1.2.840.113556.1.4.1941:=(cn=user1,cn=users,DC=x))
しかし、それに関係するクレイジーハイパーマジックナンバーを無視しても、それでフィルタリングしようとすると、常に0の結果が得られます(cn=user1,cn=users,DC=x
を独自のdistinguishedNameに置き換えても、*
に置き換えても)。
ユーザーの完全なDNが必要です。
(&(member=CN=Your Name,OU=Your OU,DC=company,DC=com)(objectClass=group))
これでは*を使用できないことに注意してください
したがって、再帰検索に関係するクレイジーハイパーマジックナンバーは、 検索フィルター構文 で説明されています。
1回の検索で(再帰的に)「user1」がメンバーであるすべてのグループを見つけるには:
(member:1.2.840.113556.1.4.1941:=cn=user1,cn=users,DC=x)
lDIFDE.EXEを使用して、WindowsServerに含まれているコマンドラインツールを使用して明示します。
ldifde -f user1Grps.ldf -d "dc=societe,dc=local" -r "(member:1.2.840.113556.1.4.1941:=cn=user1,ou=Monou,dc=societe,dc=local)"
W2K8またはW2K8R2サーバーで実行している場合は、管理者として実行するように注意してください。
C#でプログラミングしている場合は、次のものを使用できます。
/* Retreiving a principal context
*/
Console.WriteLine("Retreiving a principal context");
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "WM2008R2ENT:389", "dc=dom,dc=fr", "jpb", "PWD");
/* Look for all the groups a user belongs to
*/
UserPrincipal aUser = UserPrincipal.FindByIdentity(domainContext, "user1");
PrincipalSearchResult<Principal> a = aUser.GetAuthorizationGroups();
foreach (GroupPrincipal gTmp in a)
{
Console.WriteLine(gTmp.Name);
}