Error de autenticación al conectarse a la base de datos Heroku PostgreSQL


Estoy desarrollando un Nodo.aplicación js usando PostgreSQL y hosting en Heroku. Mi problema es que obtengo un error de autenticación como este:

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

Podría ser un problema SSL, pero no debería ser como se menciona aquí. SSL debe ser compatible desde el primer momento. Así que estoy perplejo y solo puedo preguntar qué podría causar este error?

No estoy seguro si tengo que editar el pg_hba.conf en mi sistema, pero ni siquiera puedo encontrarlo.

Author: j0ntech, 2012-04-23

5 answers

Me encontré con esto, es una solución simple. Simplemente conéctese a través de HTTPS

 3
Author: Jeff Dickey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-09 22:53:30

Resuelto estableciendo PGSSLMODE (http://www.postgresql.org/docs/9.0/static/libpq-envars.html ) en Heroku. Le dice a PostgreSQL que use SSL por defecto.

$ heroku config:set PGSSLMODE=require
 36
Author: jede,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-27 17:34:23

Node-postgres no admite SSL en sus enlaces javascript, que está utilizando si lo hace:

var pg = require('pg');

Para obtener SSL, debe usar el enlace nativo haciendo esto:

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

Usted no necesita usar SSL cuando su aplicación se está ejecutando dentro de Heroku, solo necesita usar SSL para conectarse de forma remota (cuando su aplicación se está ejecutando localmente).

 27
Author: matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-28 20:45:17

Agregué estos parámetros y ahora puedo conectarme a mi instancia de heroku postgres desde un servidor externo, específicamente, en la configuración de knex.js en un servidor node express:

var knex = require('knex')({
  client: 'postgres',
  connection: 'postgres://username:password@host:5432/yourdbname?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory'
});
 17
Author: adrichman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-27 17:31:36

Se encontró con el mismo problema. Acaba de activar ssl = true en los parámetros de la base de datos.

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();
 7
Author: Avinash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-09 09:26:43