Чувствительность к регистру имени пользователя и пароля Hibernate с Oracle11g

Я использую 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")....без игры в кости....любые идеи о том, как преобразовать имя пользователя в нижний регистр, потому что во время развертывания....


person Michele    schedule 29.06.2011    source источник


Ответы (2)


Ни одна версия Oracle не создает имена пользователей с учетом регистра по умолчанию. Вы всегда (по крайней мере, в течение последних 15-20 лет) могли создавать имена пользователей с учетом регистра, но при его создании вам приходилось заключать имя пользователя в двойные кавычки. Что-то типа

SQL> create user "MyCaseSensitiveUser" ...

Если предположить, что вы запустили тот же DDL в базе данных 11g, что и в 10g, это означает, что вы не добавляли двойные кавычки вокруг имени пользователя в своем выражении CREATE USER и что имя пользователя фактически не чувствительно к регистру.

В версии 11g Oracle по умолчанию начала использовать пароли с учетом регистра. Поэтому я предполагаю, что проблема в том, что пароль, передаваемый из Hibernate, не использует правильный регистр. Вы можете отключить чувствительные к регистру пароли в базе данных, вернувшись к поведению 10g, изменив параметр инициализации SEC_CASE_SENSITIVE_LOGON. Надеюсь, кто-то, кто более знаком с Hibernate, может предложить, как заставить Hibernate отправлять пароли в базу данных с учетом регистра.

person Justin Cave    schedule 29.06.2011

Это может показаться глупым ответом, но когда у меня возникла эта проблема, я просто изменил свой пароль на пароль в верхнем регистре, и это сработало. Не мой идеальный вариант...

person Ilane    schedule 18.08.2011