随着Java 1.7.0_51的出现,打开侦听器套接字的安全性限制比以前更严格。这些导致Apache Derby的网络服务器无法以异常
启动java.security.AccessControlException:拒绝访问(“java.net.SocketPermission”“localhost:1527”“listen,resolve”)
Unable to start derby database from Netbeans 7.4有各种解决方法,讨论了这种变体,但每个都似乎涉及黑客攻击JDK的java.policy文件。虽然我倾向于同意user230146的观点,即“甲骨文似乎试图以更适合天真用户的方式保护我们自己”,但我仍然非常担心黑帽黑客可以做些什么。我认为应该给予最低限度的特权来完成这项工作,而不是更多。
更多的研究导致了另一种选择,当然,这种选择不起作用(或者我不会问)。在http://apache-database.10148.n7.nabble.com/Network-Server-Access-Permissions-and-Java-1-7-0-51-td136583.html,建议在命令行调用中包含两个附加属性,其中一个属性指安全文件。在https://issues.apache.org/jira/browse/DERBY-6438(其中引用)中有一个下载样本安全文件的链接。
我下载并修改了安全文件以明确指定端口,方法是包含语句(其中1527是硬编码的,代替$ {derby.security.port})
permission java.net.SocketPermission "localhost:1527", "listen";
然后尝试使用命令
启动服务器java -classpath "C:\Program Files\Apache-derby-10.5.3\lib\*" ^
-Dderby.system.home=%CD% ^
-Djava.security.manager ^
-Djava.security.policy=%CD%\derbynet.policy ^
org.apache.derby.drda.NetworkServerControl start
然而,这并未对行为产生任何改变。
是否还有其他人成功使用过这项建议?
答案 0 :(得分:0)
这就是我能够让它工作的方式
导航到java文件夹(C:\Program Files (x86)\Java\jre7\lib\security
)
并复制java.policy文件,
或者通过添加:
permission java.lang.RuntimePermission "accessClassInPackage.com.sun.org.apache.xerces.internal.parsers";
在授予块中。