You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JDBC连接CrateDB 5.10.3时超级用户认证失败问题求助

使用JDBC连接CrateDB 5.10.3时超级用户认证失败问题求助

我最近在尝试用JDBC连接本地运行的CrateDB,折腾了好几种方法都卡在超级用户认证这一步,实在没辙了来求助大家!

最初的尝试:使用PostgreSQL驱动

我写了一段很简单的测试代码:

public class Main {

    private static String connectionURL = "jdbc:postgresql://localhost:5432/";

    public static void main(String[] args) throws SQLException {

        Properties props = new Properties();
        props.setProperty("user", "crate");

        Connection sqlConnection = DriverManager.getConnection(connectionURL, props);

        if(!sqlConnection.isClosed()) {
            System.out.println("Connection is open!");
        } else {
            System.out.println("Connection is closed!");
        }
    }
}

Maven依赖配置是这样的:

<dependencies>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>LATEST</version>
    </dependency>

    <dependency>
        <groupId>com.beust</groupId>
        <artifactId>jcommander</artifactId>
        <version>1.82</version>
    </dependency>

</dependencies>

CrateDB的认证配置

我的crate.yml里的认证规则是按照文档设置的,本地连接的超级用户crate应该走trust认证,不需要密码:

auth:
  host_based:
    enabled: true
    config:
      0:
        user: crate
        address: _local_
        method: trust
      99:
        method: password

遇到的错误

但运行代码后直接报错,说服务器要求SCRAM认证但没提供密码:

Exception in thread "main" org.postgresql.util.PSQLException: The server requested SCRAM-based authentication, but no password was provided.
    at org.postgresql.core.v3.ConnectionFactoryImpl.lambda$doAuthentication$5(ConnectionFactoryImpl.java:848)
    at org.postgresql.core.v3.AuthenticationPluginManager.withPassword(AuthenticationPluginManager.java:82)
    at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:845)
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:213)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:268)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:54)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:273)
    at org.postgresql.Driver.makeConnection(Driver.java:446)
    at org.postgresql.Driver.connect(Driver.java:298)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:683)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:191)
    at src.main.java.com.XXXX.Main.main(Main.java:17)

如果我强行给Properties加密码属性,又会报错说超级用户密码为空,认证失败——关键是CrateDB的超级用户本来就没法设置密码啊!

后来我还尝试新建了一个带密码的Admin用户,给了它所有权限,结果还是遇到同样的认证错误。

尝试换用Crate官方JDBC驱动

不死心的我换了Crate官方的JDBC驱动,依赖改成:

<dependencies>

    <dependency>
        <groupId>io.crate</groupId>
        <artifactId>crate-jdbc</artifactId>
        <version>2.7.0</version>
    </dependency>

    <dependency>
        <groupId>com.beust</groupId>
        <artifactId>jcommander</artifactId>
        <version>1.82</version>
    </dependency>

</dependencies>

代码里的连接URL也改成了jdbc:crate://localhost:5432/,结果报错更奇怪,直接说密码为空:

Exception in thread "main" io.crate.shade.org.postgresql.util.PSQLException: Etwas Ungewöhnliches ist passiert, das den Treiber fehlschlagen ließ. Bitte teilen Sie diesen Fehler mit.
    at io.crate.shade.org.postgresql.Driver.connect(Driver.java:265)
    at io.crate.client.jdbc.CrateDriver.connect(CrateDriver.java:65)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:683)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:191)
    at src.main.java.com.XXXX.Main.main(Main.java:17)
Caused by: java.lang.IllegalArgumentException: Null value for 'password'
    at com.ongres.scram.common.util.Preconditions.checkNotNull(Preconditions.java:41)
    at com.ongres.scram.common.util.Preconditions.checkNotEmpty(Preconditions.java:55)
    at com.ongres.scram.client.ScramSession$ServerFirstProcessor.clientFinalProcessor(ScramSession.java:130)
    at io.crate.shade.org.postgresql.jre8.sasl.ScramAuthenticator.processServerFirstMessage(ScramAuthenticator.java:131)
    at io.crate.shade.org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:663)
    at io.crate.shade.org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:141)
    at io.crate.shade.org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)
    at io.crate.shade.org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
    at io.crate.shade.org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:206)
    at io.crate.shade.org.postgresql.Driver.makeConnection(Driver.java:442)
    at io.crate.shade.org.postgresql.Driver.connect(Driver.java:244)
    ... 4 more

我的需求

其实我还是更想用PostgreSQL驱动,不想切换到官方的这个。谷歌搜了好半天都没找到对应的解决方案,有没有大佬能指点一下?

我的预期特别简单,就是程序能输出Connection is open!,证明Java代码能成功连接上CrateDB就行。

备注:内容来源于stack exchange,提问作者Luca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:23:08