Active DirectoryのOUからユーザー情報を取得するアプリケーションがあります。取得するパラメーターは、検索のベースとフィルター文字列です。
情報を取得したいOUがありますが、回避したいサブOUがあります。
OU=People,DC=mydomain,DC=com
のユーザー
OU=Evil,OU=People,DC=mydomain,DC=com
のユーザー
これは、インポートを実行するアプリケーションを書き換えてサブOUの検索を停止することで実行できることを知っていますが、検索でLDAPフィルターを使用してこれを行う方法はありますか? (DistinguishedName !contains "Evil"
)などのように、ユーザーのプロパティでフィルタリングするのではなく、ユーザーへのパスに基づいてユーザーを除外できるもの。
.NETでSystem.DirectoryServices
(.Protocols
)を使用している場合は、SearchScope
をOneLevel
に設定して、People-OUのみを検索することができます(子- OU)。しかし、OU=Good,OU=People,DC=mydomain,DC=com
がある場合は機能しません...
2番目のオプションは、People-OUにすべてのサブOU:s(objectClass=organizationalUnit
)を照会し、複数の検索リクエストを発行することです。それぞれに1つ(「悪」なものを除く)。
編集: @geoffc-実装するのは本当に難しいでしょう。デフォルトでは、認証されたすべてのユーザーがActive Directory内のすべてのオブジェクトへの読み取りアクセス権を持っています。 Evil OUに "Deny Read"を設定するだけではうまくいきません。認証されたユーザーの読み取り権限は個々のユーザーオブジェクト(この場合)に設定されており、OUに設定されたDeny ACLよりも優先されているためです。基本的に、Evil-OUの各オブジェクトに拒否読み取りACLを設定し、ディレクトリに追加された新しいオブジェクトが同じ拒否権限セットを取得することを常に確認する必要があります。 Active Directoryスキーマを編集して、認証されたユーザーの権限を削除することもできますが、これは他の多くのこと(Exchangeを含む)を破壊し、マイクロソフトではサポートされません。
AFAICT、これはActive DirectoryのLDAPフィルターでは実行できません。他の多くのLDAP実装は拡張可能なマッチングをサポートしていますが、ADはサポートしていません。
(ou:dn:=Evil
)またはdistinguishedName
のワイルドカードを含むフィルターを推奨するユーザーは、Active Directoryに対してテストしていません。
以下はトリックを行います:
(&(objectClass=user)(!(distinguishedName:=%Evil%)))
スキャンして電子メールで送信するためのアドレス帳を作成しているときに、同様の問題に遭遇しました。私は(&(objectClass=user)(!(distinguishedName:=*Evil*)))
を試しましたが、一部のMFPは*
をワイルドカードとして受け入れませんが、%
は受け入れます。
http://www.zytrax.com/books/ldap/apa/component.html によると、LDAPコンポーネントフィルターを使用して必要なものを取得することが可能です。ここにあなたが説明するものと一致する例があります:
(&(objectClass=organizationalUnit)(!(ou:dn:=Evil)))
これは、organizationUnitのobjectClassを持つすべてのオブジェクトに一致しますが、ou = Evilに一致するコンポーネントがDNに含まれているオブジェクトはすべて拒否します。
ObjectClasses organizationalUnit
およびその子孫inetOrgPerson
を使用すると、属性ou
をエントリに含めることができます。 ou
属性を値evil
でou=evil
ブランチに従属するオブジェクトに追加し、アサーション(!(ou=evil))
を検索フィルターに含めて、候補リストからの応答を制限します。 ou
という値を持つ属性evil
を含まないもの。または、 LDAPアサーション制御 を同じ方法で要求に使用して、ou
に値evil
が含まれる要求が処理されないようにすることができます。 LDAP準拠のプロフェッショナル品質のディレクトリサーバーは、これらの方法の両方をサポートします。