【问题标题】:Hibernate username password case sensitivity with Oracle11gOracle11g 的休眠用户名密码区分大小写
【发布时间】:2011-09-25 11:56:27
【问题描述】:

我在 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")....没有骰子....关于如何将用户名转换为小写的任何想法,因为在部署时......

【问题讨论】:

    标签: hibernate oracle11g passwords case-sensitive


    【解决方案1】:

    默认情况下,没有任何版本的 Oracle 创建区分大小写的用户名。您一直(至少在过去 15 到 20 年间)能够创建区分大小写的用户名,但在创建用户名时必须将其括在双引号中。类似的东西

    SQL> create user "MyCaseSensitiveUser" ...
    

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

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

    【讨论】:

      【解决方案2】:

      这似乎是一个愚蠢的答案,但当我遇到这个问题时,我只需将我的密码更改为全大写密码,它就可以工作了。不是我理想的解决方案...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-06
        • 2017-06-20
        • 2020-05-01
        • 2016-01-01
        相关资源
        最近更新 更多