web-dev-qa-db-fra.com

Propriétés de connexion à la base de données Heroku

J'essaie d'effectuer une tâche relativement simple: je veux me connecter à une base de données Heroku. J'ai créé la base de données et des informations d'identification ont été émises sur le site Heroku. Cependant, lorsque j'essaie de me connecter à cette base de données à l'aide de n'importe quoi en plus du client en ligne de commande du terminal 'heroku', des erreurs fatales ou des erreurs de connexion ne me parviennent pas.

Les deux outils que j'ai essayés de connecter en dehors de l'application de terminal Heroku sont: Navicat et IntelliJ.

L'erreur que je reçois dans Navicat lorsque j'essaie de me connecter à la base de données est la suivante:

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?

Mes paramètres de connexion sont les suivants:

Nom de la connexion Heroku Dev Test 

Nom d'hôte/Adresse IP ec2-107-21-112-215.compute-1.amazonaws.com

Port 5432

Navicat ne semble même pas tenter de se connecter à ce nom d’hôte.

Lorsque j'essaie de me connecter à IntelliJ, en utilisant toutes les informations d'identification, le message d'erreur suivant s'affiche:

Java.sql.SQLException: FATAL: no pg_hba.conf entry for Host "75.168.4.146", user "rphbqggxeokuxl", database "dc008iqk0rq4j5", SSL off

Encore une fois, j'utilise les informations d'identification que l'application Heroku me fournit pour accéder à ma base de données sur leur site Web.

Quelqu'un at-il déjà rencontré ce problème de connexion Heroku?

38
meoww-

Heroku fournit ces informations pour la connexion à partir de sources externes:

https://devcenter.heroku.com/articles/heroku-postgresql#external-connections-ingress

Le deuxième message d'erreur indique que PostgreSQL n'est pas configuré pour accepter la connexion que vous essayez d'établir. Étant donné les informations fournies par Heroku, il est fort à parier que vous ne vous connectez pas avec SSL. Essayez d'activer cela sur votre connexion.

Voici les instructions pour utiliser SSL avec Navicat: http://mirror.navicat.com/manual/online_manual/fr/navicat/rv_manual/ClientCert.html .

Cela peut être utile pour configurer Intellij pour utiliser SSL: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-Java#connecting-to-a-database-remotely .

53
jpmc26

J'ai également eu le problème avec le message d'erreur FATAL: no pg_hba.conf entry for Host

J'ai résolu le problème de connexion à ma base de données Heroku Postgres en ajoutant ce qui suit à ma chaîne JDBC: &ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory.

Exemple

jdbc:postgresql://Host:port/database?user=username&password=secret&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

Vous aurez besoin de l'option SSL uniquement si SSL est activé pour votre base de données Postgres (qui est la valeur par défaut). 

Indice

Si vous souhaitez vérifier les propriétés de votre connexion à la base de données, exécutez simplement la commande suivante avec Heroku Toolbelt : heroku pg:info --app your-heroko-appname (assurez-vous que Postgres a été insallé pour exécuter cette commande dans votre terminal)

La commande pg:info vous indiquera également que sslmode est défini sur require.

Pour tester la connexion à la base de données, je recommande SQL Power Architect car c'est l'outil que j'utilisais pour vérifier ma solution.

55
Benny Neugebauer

IntelliJ -> Sources de données et pilotes

Une fois que vous avez configuré les informations sur l'hôte, la base de données et l'utilisateur sous l'onglet General, passez sur l'onglet Advanced et assurez-vous d'avoir ajouté les éléments suivants:

  • ssl = true
  • sslfactory = org.postgresql.ssl.NonValidatingFactory

 enter image description here

19
user1607261

Vous souhaitez aider les autres utilisateurs susceptibles de rencontrer ce problème . Si vous fournissez le nom d'utilisateur et le mot de passe dans des champs distincts plutôt que sur la ligne de commande, vous devez utiliser un? entre le nom de la base de données et ssl = true et ignore le premier &

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

C'est la ligne de commande qui m'a finalement permis de me connecter à une base de données PostgreSQL avec SQL Power Architect

11
Eric Harris

Pour ceux qui pourraient utiliser Spring Boot et dont la configuration est fournie via la propriété DATABASE_URL environment (propriété non système), le suffixe peut être ajouté à la propriété:

?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

et passé avec une légère modification au haricot config:

@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;
}
9
Glenn

Vous pouvez envisager de définir une variable "PGSSLMODE" de CONFIGURATION ENVIRONNEMENTALE sur "requis" via l'interface Web ou la CLI de Heroku. 

Cas: Postgres dB configuré en tant qu'add-on Heroku et attaché à l'application sur un Heroku Dyno.

Les instructions de Heroku ne laissent malheureusement aucune indication sur la manière d'activer le protocole SSL, même s'il est requis pour tout niveau dB commençant par défaut à Standard-0. 

Suivez toutes les étapes pg-copy ou pg-upgrade (l’approche recommandée dépend de votre version de Postgres) dans les instructions Heroku; Toutefois, avant de mettre l'ancienne base de données hors service (le cas échéant), ajoutez la variable d'environnement PGSSLMODE. 

Les instructions couvrent suffisamment la manière de promouvoir la nouvelle base de données (et, par conséquent, définir l'URL DATABASE), de sorte que aucun changement/modification de celles-ci ne devrait être requis.

7
tabish89

Ajoutez ou modifiez la ligne suivante dans votre fichier postgresql.conf:

listen_addresses = '*'

Ajoutez la ligne suivante comme première ligne de pg_hba.conf. Il permet d'accéder à toutes les bases de données pour tous les utilisateurs avec un mot de passe crypté:

TYPE DATABASE USER CIDR-ADDRESS  METHOD

Host  all  all 0.0.0.0/0 md5

Redémarrez le service postgresql:

net stop postgresql-9.0 & net start postgresql-9.0 

(la version doit être basée sur votre installation) - Sous Windows (exécutez cmd en tant qu'administrateur).

Sudo service start postgresql -- On linux (or according to your linux distribution.) 
1
Mayuresh Srivastava

J'utilise node.js et j'essayais d'exécuter mes migrations knex pour mon application Heroku. J'ai essayé d'ajouter ?sslmode=require à l'URL de connexion, mais cela n'a pas fonctionné. J'ai ajouté ?ssl=true à la place et maintenant cela fonctionne parfaitement. 

Voici un exemple d'URL de connexion Heroku PostgreSQL qui fonctionne: 

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

0
user3344977