2011-02-04 18 views
4

Visual Basicを使用してLDAPクエリを作成しようとしています。 Active Directoryへの管理者アクセスはありませんが、すべてのユーザーオブジェクトを表示できます。私がLDAP://クエリでディレクトリを検索している場合、どのような制限があるのか​​わかりません。URLによるLDAPクエリ

私が作成しているExcelアプリケーションでは、ユーザーIDの入力用の列があります。ユーザーがユーザーIDを入力すると、そのユーザー(メールアドレスなど)に関連付けられたサーバー側の情報に基づいて、他の列が自動入力されるようにします。

ここで、c.Valueは、スプレッドシートに入力されました:

strUser = "CN=" & c.Value & ",OU=User Accounts,OU=Area,OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk/"
Set objUser = GetObject("LDAP://" & strUser)

問題は次のとおりです。 - OU =エリアがわかっていれば、検索は成功です。しかし、私は、UserIDのすべてのエリアOUを照会するように照会したいと思います。私が言うことができる限り、彼らは中央の場所に保持されたり、映されたりしていません。そのようなクエリでワイルドカードを使用することは可能ですか?

これについて別の方法として考えている人はいませんか?

はおそらく、匿名スタイルのアクセス権を確認している

トム

答えて

4

質問に答える前に、Active Directoryの基本的な背景知識をご紹介します。

  • Active Directory上のユーザーオブジェクトには多くの属性が含まれています。
  • CNは、ユーザーオブジェクトの属性の1つです。ログインユーザー名とは必ずしも同じではありません。
  • samAccountNameは、Windows 2000以前のログイン名の文字列です。これはおそらくあなたが探しているものです。
  • オブジェクトは階層的に格納されます。ユーザーオブジェクトは、OUまたはコンテナの下に置くことができます。

ADO接続オブジェクトを使用する必要があります。 LDAPクエリ文字列をADO接続オブジェクトに渡す必要があります。 LDAPクエリ文字列には4つの部分が含まれています。

  • 検索を開始するルートパス。返さは、あなたが使用するLDAPクエリ文字列は、上記の例では、ルート・パスがある

    <LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=yourusername));adspath;subtree 
    
    • のようなものでなければなりません
    • 検索範囲

    属性

  • LDAPフィルタ
  • <LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>。このレベルで検索を開始することを意味します。
  • ユーザーを検索しているため、LDAPフィルタは(&(objectClass=user)(samAccountName=yourusername))です。もちろん、yourusernameをコード内の何かに置き換える必要があります。あなたが本当にCNで検索を行いたい場合は、ここでCNに変更し
  • 返さ属性後で
  • そのオブジェクトにバインドすることを可能にする特殊な属性adspath、である私はあなたがすべてのユーザーを検索しようとしていると仮定しています同じドメインのオブジェクトだから、あなたの検索範囲は、ここでsubtree

である必要があり、私はそれが

userName = "harvey" 
ldapStr = "<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=" & userName & "));adspath;subtree 

Set conn = CreateObject("ADODB.Connection") 
conn.Provider = "ADSDSOObject" 
conn.Open "ADs Provider" 
Set rs = conn.Execute(ldapStr) 

While Not rs.EOF 
    wscript.echo rs.Fields(0) 
    rs.MoveNext 
Wend 
+0

あなたの仕事をする必要がありますね完全なサンプルを使用すると、右のトラックに私を設定し、どうもありがとうございました。同じことをしている人は、http://www.rlmueller.net/ADOSearchTips.htmのコードをチェックして、一般的なユーザーオブジェクト属性のリストを確認してください。http:// www。 kouti.com/tables/userattributes.htm – t0mgerman

0

、ありがとうございます。したがって、いくつかのデフォルト属性を読むことができます。あなたがしたいことは、あなたが興味のあるデータを読むのに十分な権利を持つユーザーとして認証されていることを確認することです。

UserIDが実際にPre-Windows 2000のログイン名(aka sAMAccountName) sAMAccountName = c.Valueのユーザーの完全なDN。

ところで、CN =が短い名前ではなく、むしろADUC MMCのデフォルトパターンである人物の名字であるというオッズは非常に優れています。

関連する問題