如何使用Apache Derby和JRE 1.7.0_51的安全策略文件?

时间:2014-02-22 00:00:40

标签: java security derby

随着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

然而,这并未对行为产生任何改变。

是否还有其他人成功使用过这项建议?

1 个答案:

答案 0 :(得分:0)

这就是我能够让它工作的方式

导航到java文件夹(C:\Program Files (x86)\Java\jre7\lib\security) 并复制java.policy文件, 或者通过添加:

来编辑java.policy文件
permission java.lang.RuntimePermission "accessClassInPackage.com.sun.org.apache.xerces.internal.parsers";

在授予块中。