Ubuntu Server セットアップ備忘録 (4) - Tomcat から MySQL への接続許可

さすがサーバ用ディストリビューションという事なのか、セキュリティの初期設定が厳しめになっているため、他のマシンで動いていた WAR を deploy しただけでは動かない部分があります。具体的には、JDBCドライバを介したデータベースサーバへの接続が下記のエラーで弾かれました。(ネストされていて長いので省略しています。)


org.apache.jasper.JasperException: Communications link failure
...
javax.servlet.ServletException: Communications link failure
...
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
...
java.net.SocketException: java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.24.11:3306 connect,resolve)
com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:404)
com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:265)
com.mysql.jdbc.MysqlIO.(MysqlIO.java:280)
...
JDBCドライバ内の Socket 通信がセキュリティ上の理由で拒否されています。どうやら Tomcat 起動時のセキュリティポリシを適宜設定する必要があるようです。

/etc/tomcat5.5/policy.d/ 内の policy ファイル群を見てみるとそれらしい記述がコメントアウトされていますので、50user.policy を少し弄って、下記を追記しました。


grant codeBase "file:${catalina.base}/webapps/spochan/-" {
permission java.net.SocketPermission "192.168.24.11:3306", "connect";
};

そして「sudo /etc/init.d/tomcat5.5 restart」すると、狙い通り。データベースに接続できるようになりました。