문제

Oracle 11G 데이터베이스에 연결하고 C3P0 연결 풀을 사용하는 Java JDBC 데이터베이스 응용 프로그램을 작성하고 있습니다. 예를 들어, 3 개의 데이터베이스 사용자 기본값, Tom 및 Bill이 있습니다. C3P0은 기본 데이터베이스 사용자와 함께 풀링 된 모든 연결을 엽니 다. C3P0에서 풀링 된 연결 중 하나를 검색하고 기본값 대신 청구서가되도록 사용자를 변경하고 싶습니다. 데이터베이스와 새로운 연결을 설정하지 않고 JDBC에서이를 수행 할 수 있습니까?

이미 다음을 시도했습니다.

connect BILL/password;

그러나 이것은 작동하지 않습니다. 오류가 발생합니다

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

다른 옵션이 있습니까? 내가하려는 일을 용이하게 할 수있는 컨텍스트 세트 또는 스위칭과 관련이 있습니까?

감사!

도움이 되었습니까?

해결책

어제 조사 후 솔루션은 Oracle Proxy 인증을 사용하는 것임을 알았습니다. 이 솔루션은 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 */

이것과 관련된 다른 뉘앙스가 있다면 놀라지 않을 것입니다. 그러나 이것은 좋은 시작입니다. 도와 주셔서 감사합니다, 모두!

다른 팁

확인하다

Oracle VPD의 JDBC 확장

oracleconnection.clientidentifier 설정은 표준 / 나에게 더 적합한 것으로 보입니다

오래된 스레드에 게시해서 죄송합니다. 업데이트를 생각했습니다.

이러한 사용자가 응용 프로그램을 통해 데이터베이스에 대화식으로 로그인하지 않으면 각 사용자마다 하나의 별도 풀만있는 것이 불합리합니까? 그런 다음 일부 연결 관리자를 사용하여 적절한 연결을 검색 하시겠습니까?

당신이 사용할 수있는 DataSource.getConnection(String user, String password). C3P0은 내부적으로 각 사용자마다 별도의 풀을 유지합니다.

C3P0은 그에게 사용한 자격 증명과 물리적 연결을 생성하며 사실 이후 풀에서 얻은 연결 자격 증명을 변경할 수 없습니다. 다른 데이터베이스 사용자와 연결을 사용하려면 다른 풀을 생성하고 사용해야합니다.

JBDC를 통해이 진술을 발행 해 보셨습니까?

alter session set current_schema=BILL.

Oracle 구조를 올바르게 기억한다면 연결하는 사용자 이름은 작업중인 스키마와 동일합니다.

JDBC를 통해 Oracle 10과 함께 과거에 위의 진술을 성공적으로 사용했습니다. 내 사용자는 루트/관리자 사용자였으며 다양한 데이터베이스 스키마에 대한 권한이 있었으며 동일한 연결에서이를 전환해야했습니다. 비밀번호를 다시 제공 할 필요가 없었습니다.

이것은 매우 보안에 민감한 모델처럼 들리지 않으므로 사용 사례에 적합한 지 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top