4

Oracle 11g データベースに接続し、c3p0 接続プールを使用する Java JDBC データベース アプリケーションを作成しています。例として、DEFAULT、TOM、および BILL の 3 人のデータベース ユーザーがいるとします。c3p0 は、プールされたすべての接続を DEFAULT データベース ユーザーで開きます。プールされた接続の 1 つを c3p0 から取得し、接続のユーザーを DEFAULT ではなく BILL に変更したいと考えています。データベースとの新しい接続を確立せずに JDBC でこれを行うことは可能ですか?

私はすでに次のことを試しました:

connect BILL/password;

しかし、これはうまくいきません。というエラーが表示されます

java.sql.SQLException: ORA-00900: invalid SQL statement

他のオプションはありますか?私がやろうとしていることを容易にすることができるコンテキストセットまたは切り替えに関係するものはありますか?

ありがとう!

4

6 に答える 6

5

昨日調べたところ、解決策は Oracle Proxy Authentication を使用することであることがわかりました。このソリューションは、JDBC 仕様の範囲外です。ただし、Oracle はそのようなソリューションを実装するためのフックを提供します。プロキシ接続を開くと、次のようになります。

import oracle.jdbc.OracleConnection;    

//Declare variables
String url = "...";
String username = "...";
String password = "...";

//Create the Connection
Connection conn = DriverManager.getConnection(url, username, password);

//Set the proxy properties
java.util.Properties prop = new java.util.Properties();
prop.put(OracleConnection.PROXY_USER_NAME, "BILL");
prop.put(OracleConnection.PROXY_USER_PASSWORD, "password");

//Cast the Connection to an OracleConnection and create the proxy session
((OracleConnection)conn).openProxySession(OracleConnection.PROXYTYPE_USER_NAME, prop);

/* The Connection credentials have now been changed */

これに関連する他のニュアンスがあっても驚かないでしょうが、これは良いスタートです. 助けてくれてありがとう、みんな!

于 2010-01-15T14:51:42.967 に答える
1

小切手

Oracle VPD の JDBC 拡張機能

OracleConnection.clientIdentifier を設定すると、より標準的/適切に見えます

古いスレッドに投稿して申し訳ありませんが、更新することを考えました。

于 2012-08-14T15:41:05.093 に答える
0

これらのユーザーがアプリケーションを介してデータベースにインタラクティブにログインしない場合、ユーザーごとに1つずつ、3つの別々のプールを用意するのは不合理ですか?次に、接続マネージャーを使用して適切な接続を取得しますか?

于 2010-01-14T18:25:19.683 に答える
0

を使用できますDataSource.getConnection(String user, String password)。c3p0は、ユーザーごとに個別のプールを内部的に維持します。

于 2010-01-14T18:37:07.350 に答える
0

c3p0 は、使用するように指示した資格情報を使用して物理接続を作成します。プールから取得した接続の資格情報は、事後に変更することはできません。異なるデータベース ユーザーとの接続を使用する場合は、異なるプールを作成して使用する必要があります。

于 2010-01-14T18:49:44.470 に答える
0

jbdc 経由で次のステートメントを発行してみましたか:

alter session set current_schema=BILL.

オラクルの構造を正しく覚えていれば、接続に使用するユーザー名は、作業中のスキーマと同じです。

過去にjdbcを介してOracle 10で上記のステートメントを正常に使用しました。私のユーザーはルート/管理者ユーザーで、さまざまなデータベーススキーマへのアクセス許可があり、同じ接続でそれらを切り替える必要がありました。パスワードを再度入力する必要がないことに注意してください。

これはセキュリティを意識したモデルとは思えないため、ユースケースに適しているかどうかはわかりません。

于 2010-01-14T20:16:49.053 に答える