【问题标题】:Authentication failure for Iam Authentication on Postgres Cloud SQL through jdbc Hikari通过 jdbc Hikari 在 Postgres Cloud SQL 上进行 Iam 身份验证的身份验证失败
【发布时间】:2022-01-31 20:41:41
【问题描述】:

我正在尝试按照此处的文档使用 JDBC SocketFactory 连接到 Postgres Cloud SQL 实例:https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory/blob/main/docs/jdbc-postgres.md

HikariDataSource pool = null;
HikariConfig config = new HikariConfig();

//String jdbcURL = String.format("jdbc:postgresql:///%s", DBNAME);
String jdbcURL = String.format("jdbc:postgresql:///%s?cloudSqlInstance=%s&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=%s&password=%s&enableIamAuth=true&sslmode=disable",DBNAME,CLOUDSQLINSTANCE,USER,PASSWORD);
Properties connProps = new Properties();
connProps.setProperty("user", USER);
connProps.setProperty("password", PASSWORD);
connProps.setProperty("sslmode", SSLMODE);
connProps.setProperty("socketFactory", SOCKETFACTORY);
connProps.setProperty("cloudSqlInstance", CLOUDSQLINSTANCE);
connProps.setProperty("enableIamAuth", ENABLEIAMAUTH);
connProps.setProperty("ipTypes","PRIVATE");
System.out.println("jdbcurl: " + jdbcURL);
config.setJdbcUrl(jdbcURL);
config.setDataSourceProperties(connProps);
config.setConnectionTimeout(10000); // 10s
try {
     pool = new HikariDataSource(config);
}
catch (Exception e){
    System.out.println(e.getMessage() + e.getMessage() );
    e.printStackTrace();
}

我得到的错误是:

com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: 失败 初始化池:致命:用户密码验证失败 “XXXXXX-compute@developer.gserviceaccount.com”在 com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:596) 在 com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:582) 在 com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) 在 com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:81) 在 com.aexp.ngbd.mdm.util.ConnectionUtil.createConnectionPool(ConnectionUtil.java:49) 在 com.aexp.ngbd.mdm.avro.AvroToSQLInsert.createSQLFile(AvroToSQLInsert.java:84) 在 com.aexp.ngbd.mdm.avro.ReadFromPubSub.lambda$subscribeWithAvroSchemaExample$0(ReadFromPubSub.java:48) 在 com.google.cloud.pubsub.v1.MessageDispatcher$4.run(MessageDispatcher.java:396) 在 java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:829) 引起: org.postgresql.util.PSQLException:致命:密码验证 用户“XXXXXXXX-compute@developer.gserviceaccount.com”失败 在 org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:623) 在 org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:163) 在 org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:215) 在 org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) 在 org.postgresql.jdbc.PgConnection.(PgConnection.java:225) 在 org.postgresql.Driver.makeConnection(Driver.java:466) 在 org.postgresql.Driver.connect(Driver.java:265) 在 com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:121) 在 com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) 在 com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) 在 com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) 在 com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ... 12 更多

我在计算引擎上运行 jar。我可以使用 psql 使用已启用 IAM 身份验证的相同 ServiceAccount 连接到 PostgreSQL 实例。我通过下面的云 SQL 身份验证代理连接:

satish@XXXX-load:~$ psql "host=127.0.0.1 sslmode=disable dbname=mdm user=XXXXXXX-compute@developer port=1234"
psql (11.14 (Debian 11.14-0+deb10u1), server 13.4)
WARNING: psql major version 11, server major version 13.
         Some psql features might not work.
Type "help" for help.

mdm=> \dt

我的问题是,如何仅使用 Java 中的 ServiceAccount 连接到 Postgres 实例?

以下是我的 pom.xml 依赖项:

<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>postgres-socket-factory</artifactId>
    <version>1.4.2</version>
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.3.1</version>
</dependency>

com.google.cloud.sql:postgres-socket-factory:1.4.2-dev 在 Maven 中心似乎不可用。这是问题吗?我能找到的最新版本是1.4.2

即使我使用XXXXXXX-compute@developer 用户,我仍然会收到以下错误。

无法初始化池:致命:Cloud SQL IAM 服务帐号 用户“470754621570-compute@developer”的身份验证失败失败 初始化池:致命:Cloud SQL IAM 服务帐号 用户“470754621570-compute@developer”的身份验证失败 com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: 失败 初始化池:致命:Cloud SQL IAM 服务帐号 用户“470754621570-compute@developer”的身份验证失败 com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:596) 在 com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:582) 在 com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) 在 com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:81) 在 com.aexp.ngbd.mdm.util.ConnectionUtil.createConnectionPool(ConnectionUtil.java:52) 在 com.aexp.ngbd.mdm.avro.AvroToSQLInsert.convertAvroToPostgres(AvroToSQLInsert.java:37) 在 com.aexp.ngbd.mdm.avro.AvroToSQLInsert.createSQLFile(AvroToSQLInsert.java:163) 在 com.aexp.ngbd.mdm.avro.ReadFromPubSub.lambda$subscribeWithAvroSchemaExample$0(ReadFromPubSub.java:51) 在 com.google.cloud.pubsub.v1.MessageDispatcher$4.run(MessageDispatcher.java:396) 在 java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834) 引起: org.postgresql.util.PSQLException:致命:Cloud SQL IAM 服务 用户的帐户身份验证失败 “470754621570-compute@developer”在 org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:623) 在 org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:163) 在 org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:215) 在 org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) 在 org.postgresql.jdbc.PgConnection.(PgConnection.java:225) 在 org.postgresql.Driver.makeConnection(Driver.java:466) 在 org.postgresql.Driver.connect(Driver.java:265) 在 com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:121) 在 com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) 在 com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) 在 com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) 在 com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ... 13 更多

【问题讨论】:

标签: java postgresql google-cloud-sql hikaricp cloud-sql-proxy


【解决方案1】:

除了问题之外,在这里回答这个问题。

开发工件是自述文件中的错字。 1.4.2是最新的公共神器。

另外,您的用户名应为XXXXXX-compute@developer(省略gserviceaccount.com)。

【讨论】:

  • 还是不行。更新了原帖。我在这里错过了什么吗?仅提供服务帐户名称不足以访问数据库!!?我在这里想念什么?云身份验证代理二进制服务如何在这里发挥作用?我关注了所有的 GitHub/Google 文档,但没有弄清楚这一点。
  • 实际上,我试图让它在我的本地机器上工作。由于我使用的是计算引擎服务帐户,因此在我使用计算引擎时它可以工作。
猜你喜欢
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 2017-09-18
  • 2017-11-27
  • 1970-01-01
  • 2018-10-29
相关资源
最近更新 更多