Здравствуйте,
Я делаю проект с базой данных, где база данных находится в Google Cloud.Проблема заключается в нескольких соединениях, когда проект должен иметь возможность доступа к базе данных из нескольких источников, а облако изначально разрешает это путем ручного внесения в белый список всех IP-адресов, что неприемлемо для моего сценария.
Я пробовалиспользовать SSL, но, к сожалению, я не могу подключиться, что бы я ни делал.Когда я иду без SSL, и я вхожу в белый список своего IP, соединение успешно.
Я новичок в базах данных и о возможных способах подключения к ним.Поэтому мне нужно некоторое базовое объяснение того, что я должен делать или что я делаю неправильно, так как я немного растерялся.
То, что я делал, следуя инструкциям Postgre, Google, веб-сайтов и уже открытых тем:
1) Получил 3 файла из облака - server-ca.pem, client-key.pem, client-cert.pem , куда я импортировал server-ca.pem и client-cert.pem в хранилище ключей Java
2) Пробовал оба способа именования свойствподключиться к базе данных (назвав их все в URL и задав их как свойство), где элементы перечислены в PSQL, сгенерированном облаком Google
PSQL:
psql "sslmode=verify-ca sslrootcert=server-ca.pem \
sslcert=client-cert.pem sslkey=client-key.pem \
hostaddr=MYIP \
port=5432 \
user=postgres dbname=postgres"
Код: (файлы .pam включены в каталог проекта)
public static Connection connectDb(){
Connection conn = null;
String url = "jdbc:postgresql://MYIP:5432/";
Properties props = new Properties();
props.setProperty("user","postgres");
props.setProperty("password","admin");
props.setProperty("ssl","true");
props.setProperty("sslmode","verify-ca");
props.setProperty("sslrootcert","server-ca.pem");
props.setProperty("sslcert","client-cert.pem");
props.setProperty("sslkey","client-key.pem");
String name = "postgres";
String password = "postgres";
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException classNotFoundException) {
classNotFoundException.printStackTrace();
}
try {
conn = DriverManager.getConnection(url, props);
} catch (SQLException sqlException){
sqlException.printStackTrace();
}
return conn;
}
Журнал ошибок:
org.postgresql.util.PSQLException: The connection attempt failed.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:292)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
at org.postgresql.Driver.makeConnection(Driver.java:454)
at org.postgresql.Driver.connect(Driver.java:256)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:678)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190)
Любые советы, помощь, учебные пособия, объяснение того, что я должен делать, что я сделал неправильно, какой подход выбрать, очень поможет, так как я перепробовал все и возможные способы решения этой проблемы, которую я нашел.
PS: Пожалуйста, попробуйте использовать основные и пояснительные слова и названия для вещей, так как я волнуюсь, что могу легко потеряться и запутаться.:)
Спасибо, Лукас.