web-dev-qa-db-ja.com

HerokuPostgreSQLデータベースに接続する際の認証エラー

PostgreSQLを使用してHerokuでホスティングしているNode.jsアプリケーションを開発しています。私の問題は、次のような認証エラーが発生することです。

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' }

SSLの問題かもしれませんが、前述のようにすべきではありません ここ 。 SSLはすぐにサポートされるはずです。だから私は困惑していて、このエラーの原因を尋ねることしかできませんか?

システムでpg_hba.confを編集する必要があるかどうかはわかりませんが、見つけることすらできません。

28
j0ntech

自分でこれに遭遇しました、それは簡単な修正です。代わりにHTTPS経由で接続するだけです

3
Jeff Dickey

HerokuでPGSSLMODEhttp://www.postgresql.org/docs/9.0/static/libpq-envars.html )を設定して解決しました。 PostgreSQLにデフォルトでSSLを設定するように指示します。

$ heroku config:set PGSSLMODE=require
37
jede

node-postgresは、次の場合に使用しているjavascriptバインディングでSSLをサポートしていません。

var pg = require('pg');

SSLを取得するには、次のようにしてネイティブバインディングを使用する必要があります。

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

あなたしないでくださいアプリがHeroku内で実行されている場合はSSLを使用する必要があります。リモート接続するにはSSLを使用するだけで済みます(アプリがローカルで実行されている場合)。

27
matt

これらのパラメーターを追加し、外部サーバーから、特にノードエクスプレスサーバーのknex.jsの構成で、herokupostgresインスタンスに接続できるようになりました。

var knex = require('knex')({
  client: 'postgres',
  connection: 'postgres://username:password@Host:5432/yourdbname?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory'
});
18
adrichman

同じ問題に遭遇しました。 dbparamsでssl = trueを有効にしました。

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();
8
Avinash