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

标签 hibernate oracle11g passwords case-sensitive

我正在将 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/

相关文章:

java - JtaTransactionManager 在 "flush"期间提交失败后没有回滚

oracle11g - scott 帐户被锁定在 SQL Plus 中

java - 如何编写 JUnit 测试用例并忽略数据库 Activity

java - Hibernate:必须在调用 save() 之前手动分配此类的 id

sql - Oracle SQL 中的意外输出

java - 如何对安全密码执行验证。 char[] 上的正则表达式?

database - 全新安装后如何登录和验证 Postgresql?

encryption - 哪种密码存储方式更安全

java - Spring Data Rest JPA 休息服务与 hibernate : control lazy loading

mysql - 动态卡芒贝尔奶酪