2011-06-29 18 views
2

私はHibernateをOracle 11gで使用しています。 10gで動作するコードは、11gで動作しません。これは、hibernateがユーザー名の大文字小文字をexample:adminからADMINに変更するためです。 Oracle 11gでは、デフォルトで大文字と小文字が区別されるユーザー名とパスワードが作成されます。データベース内のユーザー名が小文字管理と休止状態は大文字ADMINに変換されるため、Hibernate username password大文字と小文字の区別がOracle11gで

Context initCtx = new InitialContext(); 

Context envCtx = (Context)initCtx.lookup("java:comp/env"); 

DataSource ds = (DataSource)envCtx.lookup("jdbc/AdminDS"); 

Connection con = ds.getConnection(); 

接続は動作しません:私はすでに私のコードがあることを実現する前に、ユーザーとオブジェクトの多くを作成しました。

私は複数のことを試しました....小文字のユーザー名、パスワードで接続を作成することを含みます。たとえば、ds.getConnection( "admin"、 "password")....いいえサイコロ...配備時にユーザ名を小文字に変換する方法についてのアイデア...

答えて

3

Oracleはデフォルトで大/小文字を区別するユーザー名を作成します。あなたは常に(過去15〜20年の間は)大文字と小文字を区別するユーザー名を作成できましたが、ユーザー名を二重引用符で囲む必要があります。あなたは10gでやっ11gデータベースで同じDDLを実行したと仮定すると

SQL> create user "MyCaseSensitiveUser" ... 

のようなもの、それはあなたがあなたのCREATE USER文でユーザ名を二重引用符を追加して、ユーザー名があることをしなかったことを意味します事実、大文字と小文字は区別されません。

11gでは、Oracleはデフォルトで大文字と小文字を区別するパスワードの使用を開始しました。したがって、問題は、Hibernateから渡されるパスワードが適切なケーシングを使用していないということです。 SEC_CASE_SENSITIVE_LOGON初期化パラメータを変更することで、データベース内の大文字と小文字を区別するパスワードを無効にし、10gの動作に戻すことができます。うまくいけば、Hibernateにもっと精通している人なら、大文字小文字を区別してHibernateにパスワードをデータベースに送る方法を提案できます。

0

これは愚かな答えのように思えるかもしれませんが、私はこの問題が発生したときにパスワードをすべて大文字のパスワードに変更して機能しました。私の理想的な解決策ではありません...

関連する問題