- - PR -
ActiveDirectory環境でADSIを使った接続について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-12 19:25
こんにちは、おしえてください。ちょっと長いです。
1.環境 サーバ:Windows2003 Server Standard Edition SP1 ActiveDirectoryをインストールした独立ドメイン環境 サーバ名:TEST クライアント:Windows2000 Server SP4 上記サーバのドメインメンバPC 2.実行していること クライアント上に以下のサービスプログラムを作成し、 Windowsサービスとして実行しています。 サービスを実行するユーザはシステムアカウント(LocalSytem)です。 プログラム: VC++6.0SP6で作成 ADSI経由で上記サーバにLDAPを投げて、ユーザ、グループ検索をしています。 実際に投げる前に接続準備を行うADSI関数のADSGetObject()を使用しています。 接続文字は"LDAP://サーバ名"として、その後検索フィルタを設定しています。 3.困っていること 今回困っているのは、上記接続文字の"サーバ名"の部分です。 このサーバ名にホスト名(TEST)を指定すると正常に動作します。 しかし、IPアドレスを指定すると0x80072020(操作エラー)となり実行できません。 不思議なのはこのプログラムをサービスではなく、DeskTop上から手動で実行すると ホスト名指定でもIPアドレス指定でも正常に動作します。 また、サービスの設定をシステムアカウント(LocalSystem)ではなく、ログイン可能な ユーザアカウントに変更すると、ホスト名でもIPアドレスでも正常に動作します。 実行できるユーザアカウントに関係があるのかな? → でもLocalSystemでも接続先にホスト名を指定すると動作するからなあ。。。 サーバで認証される時にドメインの資格情報がサービスの時、送信されないのかな? → でもLocalSystemでもホスト名を指定すると動作するからなあ。。。 (上と同じじゃん) DNSの名前解決ができないのか? → ホスト名(TEST)が名前解決できないのはわかるが、IPアドレスに名前解決は ないでしょ? と、わからなくなりました。 接続先の指定方法により、接続できる、できないというのがわかりません。 ホスト名(TEST)が接続できなくて、IPアドレスが接続できるというならDNSを疑いますが、 その逆です。 ネットを検索してもこのような問題は見当たりませんでした。 この問題に対する回答を頂きたいです。 どうぞよろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-10-12 23:25
それで正常でしょう。
なにも LocalSystem に限らず、任意の local account で発生します。 で今回の場合、その service を LocalSystem のような強力な権限を持った account で起動する必要性がわかりません。 新しくその service 起動用の domain account を作成し、それで起動するように構成してやればいいと思います。 Service 起動 account を LocalSystem にするなんてのは、現在ほど security が重要視されなかった過去の遺物です。 Application を起動する account は必要最低限の権限を持つものに構成するというのが基本です。 | ||||||||||||
|
投稿日時: 2006-10-13 21:38
回答ありがとうございます。
確かにLocalSystemアカウントでサービスを実行しているのは過去の遺物で設定方法として正しくない。という意見には、私も賛成です。 ただ、そのシステムはちょっと古いシステムなので、まあしょうがないのかなというところです。 で、LocalSystemで実行しているのが、良いか、悪いかは、ここでは問題にしないでください。 今、知りたいことは、LocalSystemアカウントで実行した時に接続先にホスト名(TEST)を指定した際には正常にサーバと通信できるのに、IPアドレスを指定した際には、なぜサーバと通信できないのかということです。 ちゃっぴさんがおっしゃってる「それで正常でしょう」という根拠をお教えください。 そこが今回一番知りたい部分です。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-10-14 12:04
こんにちは。
なんとなく認証ではじかれているような感じがしますので、正常時と異常時でネットワークトレースを取ってみて、比較してみてはいかがでしょうか? もし認証の問題であれば、トレースからどの認証方式が使われているかがわかりますので、問題解決のヒントになるのではと思います。 HTH | ||||||||||||
|
投稿日時: 2006-10-14 12:22
私もわかりませんが。 おそらく「TEST」というのはNetBIOS名なのでは。 ホスト名ではなく。 つまり通信はあくまでNetBIOSでしているのであって、IPではない、と。 LocalSystemアカウントだとnullセッションで接続しているので それらが影響しているのかも。。。 | ||||||||||||
|
投稿日時: 2006-10-14 16:56
あ、ちゃんと読んでいませんでした。(__) IP address を指定すると NG で hostname だと OK ということですか。 てっきり私は、hostname を省略すると NG だと勘違いしてました・・・ Serverless Binding and RootDSE 上記で説明されているように、AD で認証されている user の場合には、servername の省略が認められています。 その辺の絡みだと思いましたが、違っているのかな? | ||||||||||||
|
投稿日時: 2006-10-14 22:51
ハルさん、加納正和さん、ちゃっぴさん回答ありがとうございます。
ハルさん> 私も認証ではじかれているような気がします。シングルサインオンの資格情報とか。。 やはりトレースをとってみるしかないですかね。。。 一番簡単なトレース方法、又はお勧めのツールがあったら、よろしければお教えいただけますか? ツールのURLでもいいです。やっぱりMicrosoftの昔からあるトレースツールですか? 加納正和さん> NetBIOS名。。。うーんサーバのNetBIOS名のことですよね? NetBIOS名で通信できて、IPアドレスだと通信できないという、そこら辺の絡みの知識がありません。 よろしければ、その辺のメカニズム(NetBIOS名とIPアドレスの関係?)を説明しているURLとかありますか? ちゃっぴさん> >IP address を指定すると NG で hostname だと OK ということですか はいそうです。 リンクのURLは参考にさせていただきます。 追伸: ドメイン環境ですので、サーバと通信する際にはクライアント上の資格情報を使用すると思うのですが、そこら辺が、IPアドレス指定、ホスト名指定で変わるとかってないのでしょうか? うー。。。考えれば考えるほど分からなくなってきた。。。。 | ||||||||||||
|
投稿日時: 2006-10-14 23:18
それはわかりましたが、LocalSystem で実行しなければならない理由がわかりません。 例えば、Windows Service から COM+ Server Application を呼び出してやれば、別の account で接続しにいくことは容易に可能でしょう。 # まあ、興味本位なら関係ないでしょうが・・・
とりあえず、AD との通信(LDAP)は暗号化されていて設定(registry)をいじらないと network を caputure してもわからなかったと記憶していますが・・・ # 過去 log になんかあった記憶が・・・ で、今回の場合どっちかな LDAP or RPC # ちゃんと検証していないのでようわかりません。 # ADO で ADSI Provider を呼び出したときは LDAP で通信しているのは確認済みです。
そいつは関係ないと思いますがね。 例えば、LDAP://hostname.DomainSuffix/〜 という形式でも通りますし、LDAP://hostname/〜 でも問題ないです。 というより、AD で NetBIOS なんて使っていないでしょう。 # WinNT provider を利用した場合には違うでしょうが。 |