当前位置: 首页 > 知识库问答 >
问题:

通过jdbc Hikari在Postgres Cloud SQL上进行Iam身份验证失败

孟选
2023-03-14

根据以下文档,我正在尝试使用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$池初始化异常:初始化池失败:FATAL:用户"XXXXXX-compute@developer.gserviceaccount.com"在com.zaxxer.hikari.pool.HikariPool.throw池初始化异常(HikariPool.java:596)在com.zaxxer.hikari.pool.HikariPool.check失败(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$订阅在java. base/java. utill. v1. MessageDispatcher4 Dollars. run(MessageDispatcher. java: 396)在java. base/java. utill. con流中。执行器$RunnableAdapter. call(Executors. java: 515)在java. base/java. utill. con流中。未来任务。java. run(FutureTask. java: 264)在java. base/java. utill. con流中。在java. base.ConnectionFactoryInpl. tryConnect(ConnectionFactoryInpl. java: 163)at org. postgresql. core. v3. ConnectionFactoryInpl. openConnectionImpl(ConnectionFactoryInpl. java: 215)at org. postgresql. core. ConnectionFactory. openConnection(ConnectionFactory. java: 51)at org. postgresql. jdbc. PgConnection.(PgConnec. java: 225)at org. postgresql. Driver. makeConnection(Driver. java: 466)at org. postgresql. Driver. Connection(Driver. java: 265)at com. zaxxer. hikari. util. DriverDataSource. getConnection(DriverDataSource. java: 121)at com. zaxxer. hikari. pool. PoolBase. newConnection(PoolBase. java: 359)at com. zaxxer. hik

我正在计算机引擎上运行jar。我能够使用psql连接到PostgreSQL实例,使用已启用IAM身份验证的同一ServiceAccount。我正在通过下面的云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中的Service帐户连接到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-cocking-Factory: 1.4.2-dev在maven中心似乎不可用。这是问题所在吗?我能找到的最新版本是1.4.2

即使我使用XXXXXXX-compute@developer用户,我仍然得到下面的错误。

初始化池失败:FATAL:云SQLIAM服务号身份验证失败用户"470754621570-compute@developer"初始化池失败:FATAL:云SQLIAM服务号身份验证失败用户"470754621570-compute@developer"com.zaxxer.hikari.pool.Hikaripool$Pool初始化池异常:初始化池失败:FATAL:云SQLIAM服务号身份验证失败用户"470754621570-compute@developer"在com.zaxxer.hikari.pool.HikariPool.throw池初始化异常(HikariPool.java:596)在com.zaxxer.hikari.pool.HikariPool.check失败(HikariP<-plhd--10/>)在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$订阅Avro模式检查0美元(ReadFromPubSub. java: 51)在com. google. Cloud. pubsub. v1。MessageDispatcher4 Dollars. run(MessageDispatcher. java: 396)在java. base/java. utili. con电流。Execors$RunnableAdapter. call(Executors. java: 515)在java. base/java. utilt. con电流。未来任务运行(FutureT在org. postgresql. core. v3。在org. postgresql. core. v3。ConnectionFactoryInpl. tryConnect(ConnectionFactoryInpl. java: 163)。在org. postgresql. core. v3。在org. postgresql. core。ConnectionFactoryInpl. openConnectionImpl(ConnectionFactoryInpl. java: 215)。在org. postgresql. jdbc。PgConnection。(PgConnec. java: 225)在org. postgresql。在org. postgresql。Driver. makeConnection(Driver. java: 466)。在com. zaxxer. hikari. util。DriverDataSource. getConnection(DriverDataSource. java: 121)在com. zaxxer. hikarie

共有1个答案

东门翰
2023-03-14

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

开发工件是README中的一个打字错误。1.4.2是最新的公共工件。

此外,您的用户名应该是XXXXXX-compute@developer(去掉gserviceaccount.com)。

 类似资料:
  • 问题: 我们有一个spring的基于MVC的RESTful API,它包含敏感信息。API应该是安全的,但是不希望在每个请求中发送用户的凭据(User/Pass组合)。根据REST指南(和内部业务需求),服务器必须保持无状态。API将由另一台服务器以混搭方式使用。 要求: > 客户端请求使用凭据(不受保护的URL);服务器返回一个安全令牌,该令牌包含足够的信息,供服务器验证未来的请求并保持无状态。

  • 我有一个.NETWCF客户端与Java服务器组件进行对话。服务器端身份验证通过配置为反向代理的中间Apache服务器完成。 NET客户端的配置如下: Apache配置为需要Kerveros身份验证: 如果我在Windows 7上启动我的应用程序,一切都按预期工作:. NET客户端使用Kerberos,Apache验证客户端,我可以使用Spring Security性访问客户端凭据。 如果我在Win

  • 问题内容: 在(带有)中,我尝试使用以下语句通过基本身份验证访问我的网页: 但是Google Chrome浏览器在控制台中向我发出以下警告: [弃用]其URL包含嵌入式凭据(例如https://user:pass@host/)的子资源请求被阻止。有关更多详细信息,请参见https://www.chromestatus.com/feature/5669008342777856。 在标记的链接中提到该

  • (我曾在SO上回顾过类似的问题,但没有一个建议对我有效) 我有一个API服务,运行在Google App Engine上(在Google云平台上)。我需要通过谷歌管理目录API的身份验证,以便我可以在我们的GSuite域上创建组。 我最初尝试了隐式授权,遵循指南,以手动获取和提供服务帐户凭据,但我认为这可能仅限于在Google App Engine上运行的应用程序之间的通信。我的理解是,在App

  • 问题内容: 注销HTTP身份验证受保护的文件夹的 正确 方法是什么? 有一些解决方法可以实现这一目标,但是它们可能会带来危险,因为它们可能有故障或在某些情况下/浏览器中无法使用。这就是为什么我要寻找正确和清洁的解决方案。 问题答案: 亩。 没有正确的方法 ,甚至没有跨浏览器一致的方法。 这是来自HTTP规范(第15.6节)的问题: 现有的HTTP客户端和用户代理通常会无限期地保留身份验证信息。HT

  • 目前用户名总是匿名的。设置调用方主体的正确方法是什么?我在拦截器里做这个吗?还是在豆子本身?我的目标是基本上能够调用一个方法loginUserWithEJBOnJboss(String user,String pass),该方法使用在jboss中配置的登录方法并正确设置主体。 我在这里不知所措,谷歌什么也没找到。也许我只是在寻找错误的单词。