Свойства Подключения К Базе Данных Heroku
Я пытаюсь выполнить относительно тривиальную задачу: я хочу подключиться к базе данных Heroku. Я создал базу данных и получил учетные данные с сайта Heroku. Однако, когда я пытаюсь подключиться к базе данных с помощью что-нибудь помимо клиента командной строки терминала "heroku", я получаю фатальные ошибки или не могу подключить ошибки.
два инструмента, с которыми я пытался связаться за пределами приложения Heroku terminal: Navicat и IntelliJ.
ошибка, которую я получаю в Navicat при попытке подключиться к базе данных:
could not connect to server: Host is down
Is the server running on host "ec2-107-21-112-215.compute-1.amazonaws.com" and accepting
TCP/IP connections on port 5432?
Мои настройки подключения следующие:
Имя Подключения Heroku Dev Test
имя хоста/IP-адрес ec2-107-21-112-215.compute-1.amazonaws.com
порт 5432
Navicat, похоже, даже не пытается подключиться к этому имя хоста.
когда я пытаюсь подключиться к IntelliJ, используя полные учетные данные, я получаю следующую ошибку:
java.sql.SQLException: FATAL: no pg_hba.conf entry for host "75.168.4.146", user "rphbqggxeokuxl", database "dc008iqk0rq4j5", SSL off
опять же, я использую учетные данные, которые приложение Heroku предоставляет мне при доступе к моей базе данных на своем веб-сайте.
кто-нибудь сталкивался с этой проблемой соединения Heroku раньше?
7 ответов
Heroku предоставляет эту информацию для подключения из внешних источников:
https://devcenter.heroku.com/articles/heroku-postgresql#external-connections-ingress
второе сообщение об ошибке указывает, что PostgreSQL не настроен для принятия соединения, которое вы пытаетесь сделать. Учитывая информацию Heroku, можно предположить, что вы не подключаетесь к SSL. Попробуйте включить это в своем соединении.
здесь инструкции для использования SSL с Navicat: http://mirror.navicat.com/manual/online_manual/en/navicat/rv_manual/ClientCert.html.
Это может быть полезно при настройке Intellij для использования SSL: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely.
у меня также была проблема с FATAL: no pg_hba.conf entry for host
сообщение об ошибке.
я решил проблему подключения к моей базе данных Heroku Postgres, добавив в строку JDBC следующее:&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
.
пример
jdbc:postgresql://host:port/database?user=username&password=secret&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
вам понадобится опция SSL, только если SSL включен для вашей базы данных Postgres (которая по умолчанию).
подсказка
если вы хотите проверить свои свойства подключения к базе данных, просто запустите следующая команда с Heroku Toolbelt: heroku pg:info --app your-heroko-appname
(убедитесь, что у вас есть Postgres, чтобы запустить эту команду в вашем терминале)
на также скажет вам, что sslmode
установлено значение require
.
для проверки подключения к базе данных я рекомендую SQL Power Architect как это инструмент, который я использовал для проверки своего решения.
IntelliJ - > источники данных и драйверы
после настройки хоста, базы данных и сведений о пользователе в разделе General
tab переключиться на Advanced
tab и убедитесь, что вы добавили следующее:
- ssl = true
- sslfactory = org.в PostgreSQL.использование SSL.NonValidatingFactory
хотел помочь другим, которые могут столкнуться с этим. Если вы предоставляете имя пользователя и пароль в отдельных областях, а не в командной строке, вы должны использовать ? между именем базы данных и ssl=true и отбросьте первый &
jdbc:postgresql://host:port/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
это командная строка, которая, наконец, позволила мне подключиться к базе данных PostgreSQL с помощью SQL Power Architect
для тех, кто может использовать Spring Boot и иметь конфигурацию, предоставленную через DATABASE_URL свойство среды (не системное свойство), суффикс может быть добавлен к свойству:
?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
и прошел через с небольшой модификацией в config bean:
@Bean
public BasicDataSource dataSource() throws URISyntaxException {
URI dbUri = new URI(System.getenv("DATABASE_URL"));
String username = dbUri.getUserInfo().split(":")[0];
String password = dbUri.getUserInfo().split(":")[1];
StringBuilder dbUrl = new StringBuilder(128);
dbUrl.append("jdbc:postgresql://")
.append(dbUri.getHost()).append(":")
.append(dbUri.getPort())
.append(dbUri.getPath());
String query = dbUri.getQuery();
if (null != query && !query.isEmpty()) {
dbUrl.append("?").append(query);
}
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setUrl(dbUrl.toString());
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
return basicDataSource;
}
вы можете рассмотреть возможность установки переменной конфигурации среды "PGSSLMODE" в "require" через веб-интерфейс Heroku или CLI.
Case: Postgres dB настроен как дополнение Heroku и прикреплен к приложению на Heroku Dyno.
в Heroku - инструкции к сожалению, не упоминайте о том, как активировать SSL, хотя это требуется для любого уровня БД, начиная со Standard-0 по умолчанию.
выполните все шаги PG-copy или PG-upgrade (предпочтительно подход зависит от вашей версии Postgres) в инструкциях Heroku; однако перед выводом из эксплуатации старой базы данных (если это необходимо) -- добавьте переменную среды PGSSLMODE.
инструкции достаточно охватывают, как продвигать новую базу данных (и, следовательно, установить DATABASE_URL), поэтому нет изменений к ним должна быть обязательно.
добавьте или отредактируйте следующую строку в postgresql.файл conf :
listen_addresses = '*'
добавьте следующую строку в качестве первой строки в файле pg_hba.conf. Это позволяет получить доступ ко всем базам данных для всех пользователей с зашифрованным паролем:
TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 0.0.0.0/0 md5
перезапустить службу postgresql:
net stop postgresql-9.0 & net start postgresql-9.0
(версия должна основываться на вашей установке) -- на windows (запустите cmd как администратор).
sudo service start postgresql -- On linux (or according to your linux distribution.)