使用Oracle11g的Hibernate用户名密码区分大小写

时间:2011-06-29 20:36:51

标签: hibernate passwords oracle11g case-sensitive username

我在Oracle 11g中使用Hibernate。使用10g的代码不能与11g一起使用,因为hibernate将用户名的情况从example: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”)....没有骰子......关于如何将用户名转换为小写的任何想法,因为在部署时......

2 个答案:

答案 0 :(得分:3)

默认情况下,Oracle的任何版本都不会创建区分大小写的用户名。您始终(至少在过去的15 - 20年中)能够创建区分大小写的用户名,但在创建用户名时必须将用户名括在双引号中。像

这样的东西
SQL> create user "MyCaseSensitiveUser" ...

假设您在11g数据库中运行了与10g中相同的DDL,这意味着您没有在CREATE USER语句中的用户名周围添加双引号,并且用户名不是,事实上,区分大小写。

在11g中,Oracle确实开始默认使用区分大小写的密码。因此,我认为问题是从Hibernate传入的密码没有使用正确的外壳。您可以通过更改SEC_CASE_SENSITIVE_LOGON初始化参数来禁用数据库中的区分大小写的密码,还原为10g行为。希望更熟悉Hibernate的人可以建议如何让Hibernate以区分大小写的方式向数据库发送密码。

答案 1 :(得分:0)

这看起来似乎是一个愚蠢的答案,但是当我遇到这个问题时,我只是将密码更改为全大写密码并且它有效。不是我理想的解决方案......