无法从Netbeans 7.4启动derby数据库

Sup*_*999 54 java netbeans derby

我下载了Netbeans 7.4和Java 7 Update 51.当我尝试从Netbeans启动Java DB或derby连接时,我收到以下错误.这是在Windows 8 PC上.我在工作时下载了windows xp 32 bit的版本.它工作正常.我不确定缺少什么.

Thu Jan 16 00:48:23 EST 2014 : Security manager installed using the Basic server security policy.
Thu Jan 16 00:48:24 EST 2014 : access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
at java.security.AccessController.checkPermission(AccessController.java:559)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.SecurityManager.checkListen(SecurityManager.java:1134)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:231)
at org.apache.derby.impl.drda.NetworkServerControlImpl.createServerSocket(Unknown Source)
at org.apache.derby.impl.drda.NetworkServerControlImpl.access$000(Unknown Source)
at org.apache.derby.impl.drda.NetworkServerControlImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.derby.impl.drda.NetworkServerControlImpl.blockingStart(Unknown Source)
at org.apache.derby.impl.drda.NetworkServerControlImpl.executeWork(Unknown Source)

at org.apache.derby.drda.NetworkServerControl.main(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

连接属性 java db属性

小智 107

这就是我做的:

  1. 通过从NetBeans 7.4执行此指令,确切了解java主目录的位置:

    System.out.println(System.getProperty("java.home"));

    这是我案例的输出:

    C:\Program Files\Java\jdk1.7.0_51\jre

    这对我来说非常重要,我正在修改另一个java.policy并没有任何效果,浪费了我几个小时.

  2. 由于java.policy是unix样式文件和只读,我用notepad ++打开并编辑它并以管理员身份执行(在同一个java主目录下):

    C:\Program Files\Java\jdk1.7.0_51\jre\lib\security\java.policy

    在第一次授予后,仅将这些行添加到文件中:

    grant {
        permission java.net.SocketPermission "localhost:1527", "listen";
    };
  3. 保存文件,由于许可的原因,这有点棘手.但是如果您以管理员身份运行notepad ++或任何其他编辑程序,则可以解决问题.

    然后尝试从NetBeans连接数据库,它适用于我.

祝好运.

  • mac的文件路径(jdk8):/ Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/security/java.policy (6认同)
  • 您可以在带有`where java`的Windows机器上找到JAVA_HOME等效项.我认为Unix等价物是`whereis java`,但我不确定. (2认同)

Pat*_*k W 31

根据Java™SE开发工具包7,Update 51发行说明

更改默认套接字权限

分发给所有代码(包括不受信任的代码)的默认套接字权限已在此版本中更改.以前,所有代码都能够将任何套接字类型绑定到大于或等于1024的任何端口号.仍然可以将套接字绑定到每个系统上的临时端口范围.短暂端口的确切范围因操作系统而异,但通常在高范围内(例如从49152到65535).新的限制是,临时范围之外的绑定套接字现在需要系统安全策略中的显式权限.

大多数使用客户端tcp套接字和安全管理器的应用程序都不会遇到任何问题,因为它们通常会绑定到临时端口.使用数据报套接字或服务器tcp套接字(以及安全管理器)的应用程序可能会遇到之前未见过的安全异常.如果发生这种情况,用户应检查是否需要请求的端口号,如果是这种情况,可以将套接字权限授予添加到本地安全策略,以解决此问题.

这意味着您必须明确设置应用程序的权限才能访问102549151之间的端口范围.因此,您可以通过在授予的权限列表中附加此行来授予此权限:

访问您的Java主目录并访问您的策略文件$JAVA_HOME/jre/lib/security/java.policy并进行以下更改.

grant{
     //List of granted permissions
     permission java.net.SocketPermission "localhost:1527", "listen";
}
Run Code Online (Sandbox Code Playgroud)


Chu*_*Lee 15

有关"问题"的说明,请参阅http://www.oracle.com/technetwork/java/javase/7u51-relnotes-2085002.html.搜索other-libs/javadb

根据您的要求,我所做的是去修改默认安全策略

cd $JAVA_HOME/jre/lib/security
Run Code Online (Sandbox Code Playgroud)

编辑java.policy(先备份!)

添加以下内容

grant codeBase "file:${java.home}}/../db/lib/*" {
        permission java.security.AllPermission;
};
Run Code Online (Sandbox Code Playgroud)

请注意,这是我的要求.

我正在授予每个使用u51 JRE的应用程序启动Derby的权限.

编辑

另一种方法是使用一组不太宽松的权限,例如:

grant codeBase "file:${java.home}}/../db/lib/*" {
    permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};
Run Code Online (Sandbox Code Playgroud)

默认情况下,NetBeans使用随GlassFish一起安装的derby版本.所以我的权限在Mac上看起来像这样.它在Windows上类似,但路径需要更改.

grant codeBase "file:/Applications/NetBeans/glassfish-4.0/javadb/lib/*" {
    permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};
Run Code Online (Sandbox Code Playgroud)


小智 5

由于上层措施不起作用,我将以下权限添加到主权限部分的末尾:

permission java.net.SocketPermission "localhost:1527", "listen,resolve";
Run Code Online (Sandbox Code Playgroud)


And*_*rea 5

您还可以通过.java.policy在主目录中调用的文件中授予所需权限来基于每个用户解决问题.

适用于Unix和Windows系统,如下所示:http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html

如果系统范围的策略文件被覆盖(例如更新JDK时),或者您没有编辑系统文件的权限,这可能很有用.

这就是我的意思$HOME/.java.policy:

grant {
    permission java.net.SocketPermission "localhost:1527", "listen";
};
Run Code Online (Sandbox Code Playgroud)