Свойства подключения базы данных Heroku
Я пытаюсь выполнить относительно тривиальную задачу: я хочу подключиться к базе данных Heroku. Я создал базу данных и получил учетные данные с сайта Heroku. Однако, когда я пытаюсь подключиться к этой базе данных, используя что-либо кроме клиента командной строки терминала 'heroku', я получаю фатальные ошибки или не могу подключиться к ошибкам.
Два инструмента, с которыми я пытался подключиться за пределами терминального приложения Heroku: 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 раньше?
Ответы
Ответ 1
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.
Ответ 2
У меня также возникла проблема с сообщением об ошибке 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
(make убедитесь, что у вас есть Postgres, чтобы не запускать эту команду в своем терминале)
Команда pg:info
также сообщит вам, что для параметра sslmode
установлено значение require
.
Чтобы проверить подключение к базе данных, я рекомендую SQL Power Architect, поскольку это инструмент, который я использовал для проверки моего решения.
Ответ 3
IntelliJ → Источники данных и драйверы
После настройки сведений о хосте, базе данных и пользователе на вкладке " General
перейдите на вкладку " Advanced
" и убедитесь, что вы добавили следующее:
- ssl = правда
- sslfactory = org.postgresql.ssl.NonValidatingFactory
- sslmode = требуется
![enter image description here]()
Ответ 4
Требуется помощь другим, кто может столкнуться с этим.
Если вы задаете имя пользователя и пароль в отдельных полях, а не в командной строке, вам нужно использовать? между именем базы данных и ssl = true и отбросить первый &
jdbc:postgresql://host:port/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
Что командная строка, которая наконец позволила мне подключиться к базе данных PostgreSQL с использованием SQL Power Architect
Ответ 5
Для тех, кто может использовать Spring Boot и иметь конфигурацию, предоставленную через свойство среды DATABASE_URL (не системное свойство), суффикс могут быть добавлены в свойство:
?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
и прошел через небольшую модификацию конфигурации 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;
}
Ответ 6
Возможно, вы захотите установить переменную ENVIRONMENT CONFIG 'PGSSLMODE' на 'require' через веб-интерфейс Heroku или интерфейс командной строки.
Кейс: Postgres dB настроен как дополнение Heroku и присоединен к приложению на Heroku Dyno.
К сожалению, в инструкциях Heroku не упоминается о том, как активировать SSL, хотя это требуется для любого уровня дБ, начиная со Стандарт-0 по умолчанию.
Выполните все шаги pg-copy или pg-upgrade (предпочтительный подход зависит от вашей версии Postgres) в инструкциях Heroku; однако, перед выводом из эксплуатации старой базы данных (если применимо) - добавьте переменную среды PGSSLMODE.
Инструкции достаточно подробно описывают, как продвигать новую базу данных (и, следовательно, устанавливать DATABASE_URL), поэтому никаких изменений/модификаций в них не требуется.
Ответ 7
Добавьте или отредактируйте следующую строку в файле 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.)
Ответ 8
Я использую node.js и пытался запустить миграцию knex для моего приложения Heroku. Я попытался добавить ?sslmode=require
к URL-адресу соединения, но это не сработало. Вместо этого я добавил ?ssl=true
и теперь он работает отлично.
Вот пример URL-адреса соединения Heroku PostgreSQL, который работает:
postgres://user:[email protected]:port/databasename?ssl=true
Ответ 9
Я дал ответ на этот вопрос, включая все другие технологии для удаленного подключения к базе данных Heroku.
Перейдите по ссылке.