2012-04-23 14 views
23

Ich entwickle eine Node.js-Anwendung mit PostgreSQL und Hosting auf Heroku. Mein Problem ist, dass ich einen Authentifizierungsfehler wie so erhalten:Authentifizierungsfehler beim Herstellen einer Verbindung mit der Heroku PostgreSQL-Datenbank

14:32:05 web.1  | { [error: no pg_hba.conf entry for host "193.40.244.196", user "username", database "database_name", SSL off] 
14:32:05 web.1  | length: 168, 
14:32:05 web.1  | name: 'error', 
14:32:05 web.1  | severity: 'FATAL', 
14:32:05 web.1  | code: '28000', 
14:32:05 web.1  | detail: undefined, 
14:32:05 web.1  | hint: undefined, 
14:32:05 web.1  | position: undefined, 
14:32:05 web.1  | internalPosition: undefined, 
14:32:05 web.1  | internalQuery: undefined, 
14:32:05 web.1  | where: undefined, 
14:32:05 web.1  | file: 'auth.c', 
14:32:05 web.1  | line: '483', 
14:32:05 web.1  | routine: 'ClientAuthentication' } 

Es könnte ein SSL-Problem sein, aber es soll nicht als here erwähnt sein. SSL sollte von Anfang an unterstützt werden. Ich bin also ratlos und kann nur fragen, was diesen Fehler verursachen könnte?

Ich bin mir nicht sicher, ob ich vielleicht die pg_hba.conf auf meinem System bearbeiten muss, aber ich kann es nicht einmal finden.

Antwort

3

Ran in das selbst, es ist eine einfache Lösung. Nur eine Verbindung über HTTPS statt

+1

In der Regel genügt es, nur den Port auf 5572 des mit 'heroku config' aufgelisteten Ports zu setzen. –

+13

"Einfach über HTTPS verbinden". Könnten Sie das näher ausführen? Meinst du Port 5572 angeben, wie David Pelaez vorschlägt? Das funktioniert nicht für mich, noch spezifiziert ssl: true in den params wie jemand anderes vorgeschlagen hat, noch spezifiziert er beides. Ich verwende die Javascript-Bindungen, nicht nativ. – Jake

27

Knoten-Postgres SSL nicht unterstützt darin Javascript Bindungen ist, die Sie verwenden sind, wenn Sie tun:

var pg = require('pg'); 

SSL zu erhalten, müssen Sie die native Bindung verwenden, indem dies zu tun:

var pg = require('pg').native; 

Sie brauchen keine SSL verwenden, wenn Sie Ihre App innerhalb Heroku läuft, müssen Sie nur eine remote-Verbindung müssen die Verwendung von SSL (wenn Ihre Anwendung lokal ausgeführt wird).

+0

Man benötigt keine native Bindung, um SSL mehr auszuführen. – JVerstry

+1

Arbeitete für mich ... danke! (Wenn Sie Sequelize verwenden, fügen Sie 'native: true' zum' new Sequelize' -Optionsobjekt hinzu) – timborden

+2

Dies erfordert 'npm i pg-native' – standup75

7

Ran in die gleiche Ausgabe. Just Enabled ssl = true in den DB-Parametern.

var pg = require('pg'); 
var params = { host: 'heroku_hostname',user: 'username',password: 'password',database: 'database',ssl: true }; 
var client = new pg.Client(params); 
client.connect(); 
+0

Dies sollte die akzeptierte Antwort sein! – whirlwin

16

Ich habe diese params und kann nun meine Heroku Postgres Instanz von einem externen Server, und zwar in der Konfiguration von knex.js in einem Knoten Express-Server verbinden:

var knex = require('knex')({ 
    client: 'postgres', 
    connection: 'postgres://username:[email protected]:5432/yourdbname?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory' 
}); 
+0

danke für das Knex-Beispiel! Wo hast du diese Informationen gefunden? – triniMahn

+0

nicht sicher! aber ich sehe es ist dokumentiert, so war es vielleicht hier: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java – adrichman

+0

Das hat mir geholfen! Vielen Dank! – albertpeiro

35

es wird gelöst, indem PGSSLMODE (http://www.postgresql.org/docs/9.0/static/libpq-envars.html) auf Heroku. Es weist PostgreSQL an, SSL als Standard festzulegen.

$ heroku config:set PGSSLMODE=require 
+6

sollte als die richtige Antwort markiert werden –

+0

Einverstanden. Dies ist die beste Antwort, da meine lokalen und Remote-Versionen mit möglichst wenig Code arbeiten. – saoyr5

+0

perfekte Lösung für Heroku, vielen Dank! – Sebastian

Verwandte Themen