2016-08-29 7 views
0

内部Webアプリケーションでは、接続プーリングの利点を得るためにOracleのプロキシ認証を使用することにしましたが、実際のユーザーは引き続きデータベースに渡されます。これを主に使用するのは、トリガーがユーザー名を取得し、[変更者]フィールドに挿入するためです。Oracleプロキシ・ユーザーおよびクライアント接続プーリング

最初にテストしたところ、すべてうまく見えました。今は複数のユーザーでテストしており、問題が発生しています。誰でも最初に取得するのは、データベースでキャプチャされる唯一のユーザー(少なくともしばらくの間)です。私はそれが最初の人が接続を取得して切断するクライアント接続のプーリングに原因があると考えています。次の人はWebサーバーに当たって、ODP.Netはその人にもう1つの接続を提供します。私はそれがユーザーを適切に変更しないと仮定することができます。

これは意図した動作か、おそらくクライアントの問題ですか?

ODP.Netが4.112.3.0の64ビット11g(11.2.0.4.0)を使用しており、クライアントの接続プーリングのみを使用しています。データベース常駐接続プーリング(DRCP)を使用していません。

接続文字列: データソース= myOracleDB;プロキシユーザID = pUserId;プロキシパスワード= pPassword;ユーザーID = myUsername;

+0

これは、ODP.NETの非常に古いバージョン(少なくとも4年間)です。最新の12.1バージョンのODP.NETを試してみてください。それ以来、数多くのバグが修正されています。 http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html –

+0

ODP.Netのアップグレードは役に立ちません。 4.121.2.0リリース4にアップグレードしましたが、同じ結果が得られました。 –

答えて

0

問題を解明しました。私はORM、NHibernateを使用していることに言及しませんでした。それが問題の原因です。 Connection Stringは、NHibernateのセッションファクトリの設定の一部として設定されます。これは、ワンタイム設定オブジェクトとして設定する必要があります。これにより、すべてのNHibernateセッションが同じ接続文字列(およびユーザ名)で作成されます。これはセッションファクトリーの存続期間中存続します。

解決策は、NHibernateのDriverConnectionProviderクラスをオーバーライドし、ConnectionStringプロパティをオーバーライドして現在のユーザーを含むようにConnectionStringを設定することです。次に、web.configファイルで次のように指定します。 <property name="connection.provider">MyConnectionProvider, MyAssembly</property>

関連する問題