2011-10-19 112 views
1

我正在嘗試爲sa用戶設置自定義密碼。我application.conf包含Play Framework:如何更改內存sa用戶的默認密碼?

db=mem 
db.url=jdbc:h2:mem:play;MODE=MYSQL 
db.driver=org.h2.Driver 
db.user=sa 
db.pass=newpass 

...好戲框架似乎覆蓋它裏面play.db.DBPlugin

if(p.getProperty("db.url") != null && p.getProperty("db.url").startsWith("jdbc:h2:mem:")) { 
    p.put("db.driver", "org.h2.Driver"); 
    p.put("db.user", "sa"); 
    p.put("db.pass", ""); 
} 

我怎樣才能解決這個得到什麼?

回答

2

據我所知,這是因爲H2在內存模式下使用默認的用戶/密碼,因爲它是一個基於RAM的數據庫,當應用程序停止並且用戶的任何更改將會丟失時,它將被刪除。

爲了避免這種情況,您必須使用H2或其他數據庫的「文件」(而不是「mem」)實例。

我想不出你想要一個內存數據庫和更改密碼相關的場景。你能解釋一下這種情況嗎?爲什麼你想改變密碼?也許我們可以通過指出一個替代方案來幫助。

+0

嗯,我想使用內存數據庫,因爲我在服務器上有很多可用的RAM,而且我看到的基準測試顯示內存H2比我可用的替代方法快得多。另外,我的應用程序中的數據庫不需要在初始數據加載(或補丁程序)後可寫/可更新。所以,我有一個在應用程序啓動時運行的工作,它填充了我的數據庫。之後,所有請求都是數據庫讀取,而不是寫入。出於安全原因,我不喜歡使用空白/默認密碼激活數據庫帳戶。 – DaveS

+1

@DaveS好吧,這是一個非常具體的情況說實話。唯一的選擇似乎是編輯框架。雖然說實話,作爲內存中的只讀數據庫,擁有默認用戶/密碼不應該是一個明智的安全問題。所有的數據也可以作爲系統中的文件(工作負載的文件)提供,所以我會爲此擔心。 –

+0

感謝您的回答。我擔心它會涉及編輯Play源代碼。那麼我可能會堅持使用默認值。它工作得很好。 – DaveS