web-dev-qa-db-de.com

Node.js, PostgreSQL-Fehler: Kein Eintrag für pg_hba.conf für den Host

Ich verfolge diesen Artikel (( http://nodeexamples.com/2012/09/21/connecting-to-a-postgresql-database-from-node-js-using-the-pg-module/ ) Ich habe meine App bereits für heroku bereitgestellt und verwende momentan express.node.js, um eine Verbindung zu einer PostgresSQL-Datenbank in Heroku herzustellen, die ich gerade installiert habe. Ich komme bis zum Ende des Artikels und benutze den Befehl 

node myfile.js

Ich bekomme diesen Fehler

error: no pg_hba.conf entry for Host "...", user "...", database "...", ... 

Wie kann ich eines erstellen und wo sollte ich es in meinem App-Verzeichnis ablegen?

Unten ist die gesamte Fehlermeldung. Ich habe die Zeichenfolgen für IP-Adresse, Benutzer und Datenbank geändert, aber es sieht im Grunde genauso aus. 

events.js:72
    throw er; // Unhandled 'error' event
          ^
error: no pg_hba.conf entry for Host "00.000.000.00", user "username", database "databasename", SSL off
at Connection.parseE (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:526:11)
at Connection.parseMessage (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:356:17)
at Socket.<anonymous> (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:105:22)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:748:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:410:10)
at emitReadable (_stream_readable.js:406:5)
at readableAddChunk (_stream_readable.js:168:9)
at Socket.Readable.Push (_stream_readable.js:130:10)

Edit: Ich habe etwas recherchiert und festgestellt, dass sich die Datei 'pg_hba.conf' in meiner befindet 

/usr/local/var/postgres 

und ich habe diese Zeile in die Datei 'pg_hba.conf' eingefügt

# TYPE  DATABASE        USER            ADDRESS                 METHOD
 Host   all             all                                     trust

auch versucht

# TYPE  DATABASE        USER            ADDRESS                 METHOD
Host   all             all              0.0.0.0/0               md5

aber es heißt immer, es gibt keinen Eintrag für meinen Host, Benutzer, Datenbank usw. ... Ist meine 'pg_hba.conf'-Syntax in irgendeiner Weise falsch?

14
stcho

Ändern Sie Ihren Verbindungscode, um ssl zu verwenden. Folgen Sie Ihrem verlinkten Beispiel:

var conString = "pg://admin:[email protected]:5432/Employees";
var client = new pg.Client(conString);
client.connect();

wird:

var client = new pg.Client({
    user: "admin",
    password: "guest",
    database: "Employees",
    port: 5432,
    Host: "localhost",
    ssl: true
}); 
client.connect();

https://github.com/brianc/node-postgres/wiki/Client#new-clientobject-config--client

26
aembke

Wenn sequelize alle Ihre Bemühungen zum Aktivieren von SSL ignoriert, können Sie versuchen, pg davon zu überzeugen, SSL standardmäßig für alle Verbindungen zu aktivieren:

var pg = require('pg');
pg.defaults.ssl = true;

const Sequelize = require('sequelize');
const sequelize = new Sequelize('postgres://...');
11
vizmi

Sie können auch ENVIRONMENT CONFIG VARIABLE 'PGSSLMODE' verwenden, um über die Web-Schnittstelle von Heroku oder die CLI 'zu' anfordern '.

Fall: Postgres dB als Heroku-Add-On eingerichtet und mit der App auf einem Heroku-Dyno verbunden.

Heroku bietet ziemlich gute Unterstützung für das Herstellen einer Verbindung zu einer seiner Add-On-Datenbanken. Es lässt jedoch leider (oder ich habe es vermisst) die Erwähnung der Vorgehensweise zum Erzwingen von SSL aus, da alle Heroku-dB-Ebenen, die mit Standard-0 beginnen, standardmäßig SSL durchsetzen.

4
tabish89

Dieser Fehler ist während des Upgrades der pg-Datenbank auf heroku von hobby tier auf standard-0 aufgetreten. SSL ist erforderlich, aber wir haben es nicht in unserer Konfiguration festgelegt.

In config einschließen, wenn neue Sequelize initialisiert wird (...)

"dialect": "postgres",
"dialectOptions": {
  "ssl": true
}

Dieser Trick bestand darin, dass die ssl-Option in dialectOptions eingeschlossen ist. hier gefunden: https://github.com/sequelize/sequelize/issues/956#issuecomment-147745033

2
Simon Franzen

Was für mich funktioniert hat, war eine Kombination aus obigen Antworten und einem Kommentar (von @schybo)

let cloud_config = {
  username: process.env.DB_USERNAME,
  database: process.env.DB_DATABASE,
  password: process.env.DB_PASSWORD,
  Host: process.env.DB_HOSTNAME,
  port: 5432,
  ssl: true,
  dialect: 'postgres',
  dialectOptions: {
    "ssl": {"require":true }
  }
};

Verwende beide ssl: true, und dialectOptions: { "ssl": {"require":true }}

Comment on Sequelize issue, das auch den Dokumenten hinzugefügt wird.

1
rahuljain1311

Fügen Sie einfach ein Flag zur Client-Initialisierung hinzu:

Veränderung

const conString = "pg://admin:[email protected]:5432/Employees"
const client = new pg.Client(conString);
client.connect();

Zu

const conString = "pg://admin:[email protected]:5432/Employees"
const client = new pg.Client({
  connectionString: process.env.DATABASE_URL,
  ssl: true
});
client.connect();
0
James Broad

einstellung ssl: true hat für mich gearbeitet

let pg = require('pg');

let pgClient = new pg.Client({
    user: "admin",
    password: "guest",
    database: "Employees",
    port: 5432,
    Host: "localhost",
    ssl: true
}); 
pgClient.connect();
0
Edwin Ikechukwu