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を編集する必要があるかどうかはわかりませんが、見つけることすらできません。
自分でこれに遭遇しました、それは簡単な修正です。代わりにHTTPS経由で接続するだけです
HerokuでPGSSLMODE
( http://www.postgresql.org/docs/9.0/static/libpq-envars.html )を設定して解決しました。 PostgreSQLにデフォルトでSSLを設定するように指示します。
$ heroku config:set PGSSLMODE=require
node-postgresは、次の場合に使用しているjavascriptバインディングでSSLをサポートしていません。
var pg = require('pg');
SSLを取得するには、次のようにしてネイティブバインディングを使用する必要があります。
var pg = require('pg').native;
あなたしないでくださいアプリがHeroku内で実行されている場合はSSLを使用する必要があります。リモート接続するにはSSLを使用するだけで済みます(アプリがローカルで実行されている場合)。
これらのパラメーターを追加し、外部サーバーから、特にノードエクスプレスサーバーのknex.jsの構成で、herokupostgresインスタンスに接続できるようになりました。
var knex = require('knex')({
client: 'postgres',
connection: 'postgres://username:password@Host:5432/yourdbname?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory'
});
同じ問題に遭遇しました。 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();