H2databaseファイルを暗号化したい!

480 views
Skip to first unread message

樋口勝也

unread,
Jul 19, 2014, 2:12:34 PM7/19/14
to pla...@googlegroups.com
いつもお世話になっております。
樋口と申します。

Play Frameworkでのシステム開発を進めておりますが、現在下記の問題で行き詰っている状況です。
どなたかご存知の方がいらっしゃいましたら、どうかご教示のほどよろしくお願い申し上げます。

○内容
H2databaseのファイルを暗号化したい

○詳細・背景
システムのDBに、H2databaseを使用しております。
したがってDBに保存した値が記載された.dbファイルが作成されるわけですが、現状ではメモ帳等で開くことで
内部を閲覧できてしまっています。
この状態では少し不安なため、.dbファイルの暗号化を行いたいというのが今回の内容です。

こちらの記事を参照しまして、DBの接続設定を以下のように変更しました。

-----修正前-----
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:file:nekoSchool"
ebean.default="models.*"

-----修正後-----
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:file:nekoSchool;CIPHER=XTEA"
ebean.default="models.*"

その結果、以下のようなエラーが発生しました。
なにやら「ファイルパスワード」「ユーザパスワード」なるものが求められている事はわかったのですが、
これらが一体何を指すものなのか、そしてどこで設定すればよいのかがわからない状況です。

----------------------------------------コンソール表示内容----------------------------------------

DEBUG - JDBC URL = jdbc:h2:file:nekoSchool;CIPHER=XTEA, Username = null, partiti
ons = 1, max (per partition) = 30, min (per partition) = 5, idle max age = 10 mi
n, idle test period = 1 min, strategy = DEFAULT
WARN  - JDBC username was not set in config!
WARN  - JDBC password was not set in config!
ERROR - Failed to obtain initial connection Sleeping for 0ms and trying again. A
ttempts left: 0. Exception: null.Message:不正なパスワードフォーマットです。正し
くは: ファイルパスワード <空白> ユーザパスワード
Wrong password format, must be: file password <space> user password [90050-172]
ERROR -

! @6j0j154c5 - Internal server error, for (GET) [/] ->

play.api.Configuration$$anon$1: Configuration error[Cannot connect to database [
default]]
        at play.api.Configuration$.play$api$Configuration$$configError(Configura
tion.scala:92) ~[play_2.10.jar:2.2.3]
        at play.api.Configuration.reportError(Configuration.scala:570) ~[play_2.
10.jar:2.2.3]
        at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:252) ~[pla
y-jdbc_2.10.jar:2.2.3]
        at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:243) ~[pla
y-jdbc_2.10.jar:2.2.3]
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike
.scala:244) ~[scala-library.jar:na]
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike
.scala:244) ~[scala-library.jar:na]
        at scala.collection.immutable.List.foreach(List.scala:318) ~[scala-libra
ry.jar:na]
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
 ~[scala-library.jar:na]
        at scala.collection.AbstractTraversable.map(Traversable.scala:105) ~[sca
la-library.jar:na]
        at play.api.db.BoneCPPlugin.onStart(DB.scala:243) ~[play-jdbc_2.10.jar:2
.2.3]
        at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.sca
la:88) ~[play_2.10.jar:2.2.3]
        at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.sca
la:88) ~[play_2.10.jar:2.2.3]
        at scala.collection.immutable.List.foreach(List.scala:318) ~[scala-libra
ry.jar:na]
        at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:88) ~[play_2.1
0.jar:2.2.3]
        at play.api.Play$$anonfun$start$1.apply(Play.scala:88) ~[play_2.10.jar:2
.2.3]
        at play.api.Play$$anonfun$start$1.apply(Play.scala:88) ~[play_2.10.jar:2
.2.3]
        at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2
.10.jar:2.2.3]
        at play.api.Play$.start(Play.scala:87) ~[play_2.10.jar:2.2.3]
        at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anon
fun$1.apply(ApplicationProvider.scala:139) ~[play_2.10.jar:2.2.3]
        at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anon
fun$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.3]
        at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
        at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply
(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.3]
        at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply
(ApplicationProvider.scala:110) ~[play_2.10.jar:2.2.3]
        at scala.util.Success.flatMap(Try.scala:200) ~[scala-library.jar:na]
        at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvi
der.scala:110) ~[play_2.10.jar:2.2.3]
        at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvi
der.scala:102) ~[play_2.10.jar:2.2.3]
        at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(
Future.scala:24) ~[scala-library.jar:na]
        at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.sca
la:24) ~[scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(For
kJoinTask.java:1361) ~[scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
~[scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool
.java:1339) ~[scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:19
79) ~[scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThre
ad.java:107) ~[scala-library.jar:na]
Caused by: org.h2.jdbc.JdbcSQLException: 不正なパスワードフォーマットです。正し
くは: ファイルパスワード <空白> ユーザパスワード
Wrong password format, must be: file password <space> user password [90050-172]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
~[h2.jar:1.3.172]
        at org.h2.message.DbException.get(DbException.java:169) ~[h2.jar:1.3.172
]
        at org.h2.message.DbException.get(DbException.java:146) ~[h2.jar:1.3.172
]
        at org.h2.message.DbException.get(DbException.java:135) ~[h2.jar:1.3.172
]
        at org.h2.engine.ConnectionInfo.convertPasswords(ConnectionInfo.java:305
) ~[h2.jar:1.3.172]
        at org.h2.engine.ConnectionInfo.<init>(ConnectionInfo.java:79) ~[h2.jar:
1.3.172]
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:90) ~[h2.jar:1.
3.172]
        at org.h2.Driver.connect(Driver.java:73) ~[h2.jar:1.3.172]
        at java.sql.DriverManager.getConnection(DriverManager.java:571) ~[na:1.7
.0_55]
        at java.sql.DriverManager.getConnection(DriverManager.java:215) ~[na:1.7
.0_55]
        at com.jolbox.bonecp.BoneCP.obtainRawInternalConnection(BoneCP.java:363)
 ~[bonecp.jar:na]
        at com.jolbox.bonecp.BoneCP.<init>(BoneCP.java:416) ~[bonecp.jar:na]
        at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.jav
a:120) ~[bonecp.jar:na]
        at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:245) ~[pla
y-jdbc_2.10.jar:2.2.3]
        ... 30 common frames omitted

----------------------------------------/コンソール表示内容----------------------------------------

○開発環境
OS:windows7
JDK:jdk1.7.0_55
言語:java
play:2.2.3
IDE:Eclipse Kepler Servie Release 2

○動作想定環境
OS:windos7以降

以上です。
なにかヒントでもありましたら、よろしくお願い致します。


樋口勝也

unread,
Jul 26, 2014, 1:01:11 PM7/26/14
to pla...@googlegroups.com
自己解決致しました!

以下の通りに設定することで、ファイルが暗号化されることを確認致しました。

------------------------------------------------------------------------------------------------------------------------------------------------------
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:file:nekoSchool;USER=admin;PASSWORD=pass1 pass2;CIPHER=XTEA"
db.default.user=user1
db.default.password=pass1 pass2
------------------------------------------------------------------------------------------------------------------------------------------------------

お騒がせしてしまい申し訳ありませんでした。

2014年7月20日日曜日 3時12分34秒 UTC+9 樋口勝也:
Reply all
Reply to author
Forward
0 new messages