QA@IT

Webサーバ上の ASP.net からDBサーバ上の Oracle を参照できません

4757 PV

WindowsServer2008 SP2 32bit + IIS7 の Webサーバに ASP.net のシステムを置き、WindowsServer2008 64bit + Oracle11g の DBサーバに接続する機器構成です。
ASP.net からはデータモデルを介して ODP.net で接続しています。

Webサーバ内のIEでサイトを開くとデータベースに接続して値を表示できるのですが、他の端末からだとエラーが発生します。

例)DBサーバを「D」、Webサーバを「W」、他のPCを「C」として次のように問題が発生します。
× C → W → D
× D → W → D
○ W → W → D

■ エラーメッセージ

クエリ 'GetMST_PROPULSION_DIVISION_DEVICEByClientIp' の Load 操作に失敗しました。種類 'System.ServiceModel.DomainServices.Client.DomainOperationException' の例外がスローされました。

場所 System.ServiceModel.DomainServices.Client.WebDomainClient`1.EndQueryCore(IAsyncResult asyncResult)
場所 System.ServiceModel.DomainServices.Client.DomainClient.EndQuery(IAsyncResult asyncResult)
場所 System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult)

タイミングは、最初にDBに接続に行く直前で、DB に接続することなくエラーになっています。(DB側に接続の実績なし)

ただし、ほぼ同一の構成で作ってある検証環境ではどのパターンも正しく値を取得して表示できています。

何らかの権限の差の問題だと考えてここ数日間は本番環境と検証環境のあらゆる設定の違いを確認していますが解決できていません

解決策をご存知の方がいらっしゃいましたらご助言いただきたくよろしくお願いいたします。

  • 前のスレッドで「ダブルホップ問題」ではないかとレス差し上げましたが、そのあたりは検討されたのでしょうか? それとも無視でしょうか? -
  • 午前中から開き続けていた画面上でFixの書き込みをしたためにいただいた「ダブルホップ問題」についての記述に気付けませんでした。
    失礼なことをしてしまい申し訳ありませんでした。
    MSのサイトなどを読んでみたのですが、今のところ解決のめどはたっていない状況です。
    -
  • 本番サーバーのあるネットワークではアクティブディレクトリが使われていないようで該当しないようでした。 -
  • 統合 Windows 認証ではないのですね。C → W、D → W、W → W の違いが W → D のアクセス権に影響を与えているとすると、偽装の影響が思い浮かびますが、その点はどうなのですか? -
  • ありがとうございます。
    2点質問させていただいてよろしいでしょうか?
    1.特定のサーバーがアクティブディレクトリに参加しているかどうかを判定する方法
      Webサーバはドメインに参加していてDBサーバーはworkgroupにいます。
      ダブルホップ問題だとすればここに起因しますでしょうか?
    -
  • 2.偽装の影響についてたとえば次のサイトを参考に処理を組み込むという感じでしょうか?
      http://support.microsoft.com/kb/306158/ja
      まずやってみればいいのですが、不慣れな上に客先の環境をもし壊してしまうといけないので出来るだけ事前に納得の上作業したいと考えています。


    恐れ入りますがよろしくお願いします。
    -
  • ODP.NETの接続に使っている接続文字列で、User Id パスワードに何を設定していますか? / とパスワード無しでしょうか。Oracle DB上で作成したユーザ・パスワードでしょうか。 -
  • そもそも、運用環境での認証方式、クライアント ⇒ Web サーバー、Web サーバー ⇒ DB サーバーへのアクセス権、クレデンシャルを渡す方法など、Windows システム全体としてどのように動くプランになっているのでしょうか? そのプランに従って開発環境を構築し、十分に検証した上で運用環境に移したのではないのでしょうか? -
  • どうも質問者さん自身がそのあたりをご存じないように思えますが、そうだとすると話が通じにくいです。回答者は掲示板に書いてあること以外、質問者さんの状況は知りえないのですから。まずは、どういうプランかを明確にしていただけませんか? -
  • flied_onion様
    ありがとうございます。
    Oracleに接続するためのUserID, Password, DatabaseName すべてを記述しています。
    よろしくお願いします。
    -
  • SurferOnWww様
    ありがとうございます。
    私自身Windowsのネットワーク・IIS・データモデルのいずれについても詳しくはなく、SurferOnWww様からの確認事項について事柄自体を調べながら返答させていただいている状態です。
    -
  • ではWindows認証ではなくOracle DB認証で接続しようとしているという事ですね。検証環境のWebサーバー、DBサーバーも本番環境と同じですか?つまりWebサーバーはドメインに参加しており、DBサーバーはワークグループですか?(コンピュータ名の変更画面で所属するグループにどちらが選ばれているかで判断できます。) -
  • ↑「検証環境のWebサーバーも本番環境と同じドメイン設定ですか?」の間違いです。 /
    それと、内部例外のスタックトレースは取れませんか?
    -
  • flied_onion様 ありがとうございます。 ドメインの件については今朝気が付き確認しました。
    本番環境は前述の通りWebサーバがドメイン上でDBサーバがworkgroup上に居ますが、検証環境は両サーバともにworkgroupにいます。
    -
  • ではまず「運用環境での認証方式、クライアント ⇒ Web サーバー、Web サーバー ⇒ DB サーバーへのアクセス権、クレデンシャルを渡す方法など、Windows システム全体としてどのように動くプランになっているのでしょうか?」に答えられるよう調べてください。全体が見えないのに、部分的(例えば DB サーバーの認証方式)な話をしていても、解決できないかもしれませんので。 -
  • 会社の仕事としてやっているのですよね? 質問者さんにそのあたりの知識がなければ、同僚・先輩・上司など詳しい人に助けを求めてはいかがでしょう。 -
  • flied_onion様
    クエリ '[DBアクセスFunction]' の Load 操作に失敗しました。種類 'System.ServiceModel.DomainServices.Client.DomainOperationException' の例外がスローされました。
    -
  • 場所 System.ServiceModel.DomainServices.Client.WebDomainClient`1.EndQueryCore(IAsyncResult asyncResult) -
  • 場所 System.ServiceModel.DomainServices.Client.DomainClient.EndQuery(IAsyncResult asyncResult)
    -
  • 場所 System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult) -
  • SurferOnWww様 ありがとうございます。 言葉自体わからないものが多いのですが調べます。 -
  • SurferOnWww様 ありがとうございます。 他の者が担当していましたが問題が解決しない為に私のところに担当が回ってきました。 -
  • DomainOperationException でググってみたらこんな記事がありました。 http://d.hatena.ne.jp/vagabond890/20110930/1317373894 関係ないかもしれませんが、ご参考まで。 -
  • SurferOnWww様 ありがとうございます。 確認してみましたが、有効なのは匿名認証のみでした。 -
  • 紹介したページに書いてあることを理解しているでしょうか? Windows 認証と匿名認証の両方が有効になっていたので匿名認証を無効にして解決したと書いてありますが・・・ そのページにリンクしてある MSDN ライブラリも読んでください。 -
  • 【検証結果報告】 検証環境を出来る限り本番環境に近づけるために検証環境のWebサーバにActiveDirectoryを入れてみましたが何事もなくDBに接続できてしまいました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。