2011-06-29 57 views
2

我使用的是帶有Oracle 11g的Hibernate。使用10g的代碼不適用於11g,因爲hibernate會將示例中的用戶名大小寫更改爲ADMIN。 Oracle 11g默認創建區分大小寫的用戶名和密碼。我已經創建意識到我的代碼之前的用戶和大量的對象:休眠用戶名密碼使用Oracle11g區分大小寫

Context initCtx = new InitialContext(); 

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

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

Connection con = ds.getConnection(); 

連接不工作,因爲在數據庫中的用戶名是小寫的管理和Hibernate將其轉換爲大寫ADMIN。

我試過多種東西......包括用小寫的用戶名,密碼創建連接;如ds.getConnection(「管理員」,「密碼」)....沒有骰子....任何想法如何將用戶名轉換爲小寫,因爲在部署時間....

回答

3

沒有版本Oracle默認創建區分大小寫的用戶名。您始終(至少在過去15 - 20年內)能夠創建區分大小寫的用戶名,但在創建用戶名時必須用雙引號括住用戶名。像

SQL> create user "MyCaseSensitiveUser" ... 

假設你在,你在10g中所做的11g數據庫運行同樣的DDL的東西,這意味着你沒有在你的CREATE USER語句添加各地的用戶名雙引號和用戶名是事實上,並不區分大小寫。

在11g中,默認情況下,Oracle確實開始使用區分大小寫的密碼。因此,我認爲問題在於從Hibernate傳入的密碼未使用正確的外殼。您可以通過更改SEC_CASE_SENSITIVE_LOGON初始化參數來禁用數據庫中區分大小寫的密碼,恢復到10g行爲。希望對Hibernate更熟悉的人可以建議如何讓Hibernate以區分大小寫的方式向數據庫發送密碼。

0

這可能看起來像一個愚蠢的答案,但是當我遇到這個問題時,我只是將我的密碼更改爲全部大寫密碼,並且工作正常。不是我理想的解決方案...

相關問題