2011-10-19 82 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