H2 客户端无法连接到服务器

H2 Client couldn't connect to the server

我正在尝试连接到使用 java 在同一台机器上启动的 H2 服务器。我以混合模式启动了 H2 服务器。连接到服务器时出现错误。

启动服务器的代码是:

Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpSSL").start();

连接服务器的代码是:

Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:tcp://127.0.0.1/~/Data/test", "", "");

错误是:

连接中断:"unexpected status 352518912" [90067-197]

任何人都请帮助我。我卡在这两天了。

您需要在 URL 中使用 ssl 协议而不是 tcp,因为您在服务器上使用了加密的 socked。

"jdbc:h2:ssl://127.0.0.1/~/Data/test"

另请注意,由于安全原因,H2 的最新版本默认无法远程创建数据库。您需要在服务器端使用本地 url 创建数据库,例如 "jdbc:h2:~/Data/test",打开和关闭与它的连接就足够了。

另外我希望空密码仅适用于问题中的示例代码。如果您有一个数据库,该用户具有 ADMIN 权限(创建数据库的第一个连接的用户名和密码用于创建此类用户)和空密码或弱密码(或者如果您启用了远程数据库创建),任何人,谁可以连接到该端口,将获得对您的服务器进程的完全访问权限,并且该进程很可能已经拥有与您相同的系统访问权限,因此您可以使用 -tcpAllowOthers 和此类密码有效地创建一个远程安全漏洞。