1

我已经黔驴技穷了!

  • 我有 Ubuntu Server 18.04 和 OpenJDK 11(无头)的最小安装。
  • 下载到本地文件夹的是 Derby 的 java 9+ 二进制文件 (db-derby-10.15.2.0-bin)

路径和环境设置都是正确的!

启动服务器时,使用命令行工具startNetworkServer -h 0.0.0.0进行简单连接时出现错误ij

ij> connect 'jdbc:derby://localhost:1527/dbname;create=true';
ERROR XJ041: DERBY SQL error: ERRORCODE: 40000, SQLSTATE: XJ041, SQLERRMC: Failed to create database 'dbname', see the next exception for details.::SQLSTATE: XBM01::SQLSTATE: XJ001

derby.log 文件引用了:

java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getenv.SOURCE_DATE_EPOCH")

进一步研究这个错误,我了解到我需要一个 security.profile。我发现这个网站似乎可以解决我的问题。https://www.javacodegeeks.com/2020/04/apache-derby-database-jvm-security-policy.html

按照这些非常直接的说明,我得到:

java.security.AccessControlException: access denied
org.apache.derby.shared.common.security.SystemPermission( "engine", "usederbyinternals" )
4

1 回答 1

0

对于下一个遇到这个奇怪问题的人(它似乎有规律地发生,这里有一个简单的解决方法,复制自查尔姆斯理工学院的这个常见问题解答页面

问:当我们尝试在 Derby 中创建数据库并在 NetBeans 中创建数据库浏览器时,我们收到以下一个或多个错误:

创建数据库时出错:java.sql.NonTransientConnectionException: DERBY SQL 错误: ERRORCODE: 40000, SQLSTATE: XJ041, SQLERRMC: ...

引起:java.security.AccessControlException:访问被拒绝(“java.lang.RuntimePermission”“getenv.SOURCE_DATE_EPOCH”)

答:这是 JVM 中的某种错误配置,具有非常激进的安全策略,不允许应用程序获取系统上的时间(自纪元以来)。解决方案是编辑~/.java.policy[java.home]/lib/security/java.policy添加以下内容:

授予 { 权限 java.lang.RuntimePermission "getenv.SOURCE_DATE_EPOCH", "read"; };

如果您使用的是 Windows,您可以在此处阅读有关此策略文件的位置; https://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html

于 2021-08-06T14:18:44.877 回答