我正在将 Hibernate
与 Oracle 11g 结合使用。适用于 10g 的代码不适用于 11g,因为 hibernate 将用户名的大小写从示例:admin 更改为 ADMIN。 Oracle 11g 默认情况下创建区分大小写的用户名和密码。在意识到我的代码之前我已经创建了用户和许多对象:
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/AdminDS");
Connection con = ds.getConnection();
连接不起作用,因为数据库中的用户名是小写 admin,hibernate 将其转换为大写 ADMIN。
我尝试了多种方法......包括使用小写用户名、密码创建连接;例如,ds.getConnection(“admin”,“password”)......没有骰子......关于如何将用户名转换为小写的任何想法,因为在部署时......
最佳答案
默认情况下,没有任何版本的 Oracle 创建区分大小写的用户名。您始终(至少在过去 15-20 年)能够创建区分大小写的用户名,但在创建用户名时必须将用户名用双引号引起来。类似的东西
SQL> create user "MyCaseSensitiveUser" ...
假设您在 11g 数据库中运行了与在 10g 中相同的 DDL,这意味着您没有在 CREATE USER
中的用户名周围添加双引号。声明,并且用户名实际上不区分大小写。
在 11g 中,Oracle 确实开始默认使用区分大小写的密码。因此,我认为问题在于从 Hibernate 传入的密码没有使用正确的大小写。您可以通过更改 SEC_CASE_SENSITIVE_LOGON
来禁用数据库中区分大小写的密码,恢复到 10g 行为。初始化参数。希望更熟悉 Hibernate 的人可以建议如何让 Hibernate 以区分大小写的方式将密码发送到数据库。
关于Oracle11g 的 Hibernate 用户名密码区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6526937/