gpt4 book ai didi

java - 在 JDBC 连接上切换用户

转载 作者:搜寻专家 更新时间:2023-11-01 02:18:18 28 4
gpt4 key购买 nike

我正在编写连接到 Oracle 11g 数据库并使用 c3p0 连接池的 Java JDBC 数据库应用程序。作为示例,我有 3 个数据库用户 DEFAULT、TOM 和 BILL。 c3p0 使用 DEFAULT 数据库用户打开所有池连接。我想从 c3p0 检索池连接之一,并将连接的用户更改为 BILL 而不是 DEFAULT。是否可以在不与数据库建立新连接的情况下在 JDBC 中执行此操作?

我已经尝试过执行以下操作:

connect BILL/password;

但这行不通。我收到一条错误消息

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

还有其他选择吗?是否有与上下文设置或切换有关的东西可以促进我正在尝试做的事情?

谢谢!

最佳答案

经过昨天的研究,我发现解决方案是使用Oracle Proxy Authentication。此解决方案超出了 JDBC 规范。然而,Oracle 提供了一个钩子(Hook)来实现这样的解决方案。打开代理连接如下所示:

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 */

如果还有其他与此相关的细微差别,我不会感到惊讶,但这是一个好的开始。谢谢大家的帮助!

关于java - 在 JDBC 连接上切换用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2066295/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com