
Jak sądzę, być może zadaje to pytanie na nie tym forum co trzeba niemniej problem mam dość dziwny i odnoszę wrażenie, że to jednak jest w jakimś stopniu kwestia systemu.
Mam aplikację Webową (servlet) działającą na tomkacie 5.5 i Mysql 5.0 wszystko postawione na vpsie.
Próbuję podłączyć do bazy danych, jeśli robię to z domu (Windows) wszystko działa poprawnie, jeśli z poziomu ,,servletu'' (ten sam komputer co MySQL) dostaje taki wyjątek:
Google generalnie podpowiada, że mam wpisać coś w stylu:java.net.SocketException
MESSAGE: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:5725 connect,resolve)
STACKTRACE:
java.net.SocketException: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:5725 connect,resolve)
at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:407)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:268)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
do pliku .policy.permission java.net.SocketPermissin "127.0.0.1:5725", "connect,resolve,listen,accept";
I tu moje pytanie, którego?
Kod: Zaznacz cały
find / -name "*.policy" zwraca
/usr/lib/jvm/java-1.5.0-sun-1.5.0.16/jre/lib/security/java.policy
/usr/lib/jvm/java-1.5.0-sun-1.5.0.16/jre/lib/security/javaws.policy
/etc/tomcat5.5/policy.d/50user.policy
/etc/tomcat5.5/policy.d/04webapps.policy
/etc/tomcat5.5/policy.d/03catalina.policy
/etc/tomcat5.5/policy.d/01system.policy
/etc/tomcat5.5/policy.d/02debian.policy
/etc/java-1.5.0-sun/security/java.policy
/var/lib/tomcat5.5/conf/catalina.policy
Dotychczas wypróbowałem:
Bez skutku./etc/tomcat5.5/policy.d/04webapps.policy
/var/lib/tomcat5.5/conf/catalina.policy
/etc/java-1.5.0-sun/security/java.policy
my.cnf zawiera linijki:
Inne linijki chyba nie są istotne w tym kontekście (jak są to powiedzcie proszę, które to wkleję).[client]
port = 5725
socket = /var/run/mysqld/mysqld.sock
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 5725
#bind-address = 127.0.0.1 //tej opcji próbowałem z # i bez
Nie mam pomysłu co robić dalej i trochę mnie załamka bierze, jeśli macie jakikolwiek pomysł, to proszę o pomoc.
Pozdrawiam
Adam
[ Dodano: 2009-01-18, 10:16 ]
Witam wszystkich ponownie
Dwa dni nad tym problemem siedziałem zanim tu napisałem i nie mogłem wpaść na rozwiązanie, po napisaniu rozwiązanie znalazłem w kilka godzin ;-)
W sumie okazało się, że problem nie ma związku z Debianem. Niemniej być może komuś się przyda rozwiązanie, więc je tu zamieszczę.
Istotą problemu jest fakt, że nie wystarczy uprawnić webaplikacji do połączeń na dany IP i port
lecz trzeba również to zrobić ze sterownikiem używanym przez aplikację
tak więc w pliku 04webapps.policy trzeba umieścić dwie sekcje:
ta odpowiada za uprawnienia dla sterownika jdbc
Kod: Zaznacz cały
grant codeBase "jar:file:/var/lib/tomcat5.5/webapps/moj2/WEB-INF/lib/mysql-connector-java-5.0.8.jar!/-" {
permission java.net.SocketPermission "127.0.0.1:3306", "resolve,listen,accept,connect";
permission java.security.AllPermission ;
};
Kod: Zaznacz cały
grant codeBase "file:/var/lib/tomcat5.5/webapps/moj2/-" {
permission java.net.SocketPermission "127.0.0.1:3306", "resolve,connect,listen,accept";
permission java.security.AllPermission;
};
Pozdrawiam
Adam