Свойства подключения к базе данных 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

Имя хоста/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 раньше?


person meoww-    schedule 29.06.2013    source источник


Ответы (8)


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-базаданныхудаленно.

person jpmc26    schedule 29.06.2013
comment
Если вы настраиваете доступ из RubyMine, вот более подробная информация: stackoverflow.com/questions/20807272/ - person Franco; 27.07.2014
comment
Вот как настроить его для DbVisualizer: bartling.blogspot.com /2013/06/ - person Matt Raible; 12.06.2015
comment
Отредактируйте URL-адрес подключения и добавьте: sslmode=require. - person cvng; 31.08.2015
comment
включение ssl исправило это для меня. Спасибо! - person oldo.nicho; 13.02.2021

У меня также была проблема с сообщением об ошибке 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: heroku pg:info --app your-heroko-appname (убедитесь, что у вас установлен Postgres для запуска этой команды в вашем терминале)

Команда pg:info также сообщит вам, что sslmode установлено на require.

Для проверки подключения к базе данных я рекомендую SQL Power Architect, так как это инструмент, который я использовал для проверки своего решения. .

person Benny Neugebauer    schedule 13.09.2014
comment
&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory добавление этого решило мою проблему. Спасибо. - person Eray; 20.06.2016
comment
Большое спасибо #Бенни. Я застрял за последние два дня и, наконец, решил, и я также задал вопрос, связанный с этим, в StackOverflow. (stackoverflow.com/q/50772559/7560986). Добро пожаловать и в этом. - person Dhiral Kaniya; 11.06.2018
comment
Это мне очень помогает. Спасибо :) - person Faris Rayhan; 26.01.2019
comment
Поскольку ручное редактирование DATABASE_URL не поддерживается, самый быстрый способ — установить PGSSLMODE=require в переменных среды. stackoverflow.com/a/47536752/152711 - person Freewalker; 12.06.2019
comment
Почему NonValidatingFactory? Каковы последствия отсутствия проверки безопасности? - person jpmc26; 14.11.2019
comment
@ jpmc26 Я задавал себе те же вопросы. Определенно есть последствия для безопасности, однако кажется, что это то, что советует Heroku: help.heroku.com/S6LGZBIE/ - person Vic Seedoubleyew; 17.03.2021
comment
Это то, что сработало для меня в 2021 году. Настройка sslmode=require не сработала. - person Vic Seedoubleyew; 17.03.2021

IntelliJ -> Источники данных и драйверы

После того, как вы настроили хост, базу данных и сведения о пользователе на вкладке General, переключитесь на вкладку Advanced и убедитесь, что вы добавили следующее:

  • SSL = правда
  • sslfactory = org.postgresql.ssl.NonValidatingFactory
  • sslmode = требуется

введите здесь описание изображения

person user1607261    schedule 10.01.2016
comment
это работает. Те же свойства применяются в Jetbrains DataGrip, который я использую. - person nvasilescu; 22.02.2017

Вы можете рассмотреть возможность установки ПЕРЕМЕННОЙ КОНФИГУРАЦИИ ОКРУЖАЮЩЕЙ СРЕДЫ «PGSSLMODE» на «требовать» через веб-интерфейс Heroku или CLI.

Пример: Postgres dB настроен как надстройка Heroku и прикреплен к приложению на Heroku Dyno.

В инструкциях Heroku, к сожалению, не упоминается, как активировать SSL, хотя это требуется для любого уровня dB, начиная со Standard-0 по умолчанию.

Выполните все шаги pg-copy или pg-upgrade (предпочтительный подход зависит от вашей версии Postgres) в инструкциях Heroku; однако перед выводом из эксплуатации старой базы данных (если необходимо) добавьте переменную среды PGSSLMODE.

Инструкции достаточно подробно описывают, как продвигать новую базу данных (и, следовательно, устанавливать DATABASE_URL), поэтому никаких изменений/модификаций в них не требуется.

person tabish89    schedule 28.11.2017
comment
Спасибо, это было супер полезно! - person Matt Sanders; 03.03.2020

Хотел помочь другим, кто может столкнуться с этим. Если вы указываете имя пользователя и пароль в отдельных полях, а не в командной строке, вам нужно использовать ? между именем базы данных и ssl=true и отбросить первый &

jdbc:postgresql://host:port/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

Это командная строка, которая, наконец, позволила мне подключиться к базе данных PostgreSQL с помощью SQL Power Architect.

person Eric Harris    schedule 17.03.2015

Для тех, кто может использовать 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;
}
person Glenn    schedule 02.12.2015

Я использую node.js и пытаюсь выполнить миграцию knex для своего приложения Heroku. Я попытался добавить ?sslmode=require к URL-адресу подключения, но это не сработало. Вместо этого я добавил ?ssl=true, и теперь он работает отлично.

Вот пример URL-адреса подключения Heroku PostgreSQL, который работает:

postgres://user:[email protected]:port/databasename?ssl=true

person user3344977    schedule 31.10.2018

Добавьте или отредактируйте следующую строку в вашем файле 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.) 
person Mayuresh Srivastava    schedule 16.09.2016
comment
как вы можете получить доступ к postgresql.conf в героку? - person Wardruna; 24.01.2021
comment
На самом деле я не помню, так как давно не использую героку. См. это, если это поможет . - person Mayuresh Srivastava; 31.01.2021