连接到Heroku PostgreSQL数据库时出现身份验证错误

时间:2012-04-23 11:49:23

标签: postgresql node.js authentication node-postgres

我正在使用PostgreSQL开发一个Node.js应用程序并在Heroku上托管。我的问题是我收到了如下身份验证错误:

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问题,但不应该提到here。应该支持开箱即用的SSL。所以我很难过,只能问可能导致这个错误的原因是什么?

我不确定是否必须在我的系统上编辑pg_hba.conf,但我甚至找不到它。

6 个答案:

答案 0 :(得分:36)

在Heroku上设置PGSSLMODEhttp://www.postgresql.org/docs/9.0/static/libpq-envars.html)解决了这个问题。它告诉PostgreSQL默认为SSL。

$ heroku config:set PGSSLMODE=require

答案 1 :(得分:27)

node-postgres在它的javascript绑定中不支持SSL,如果你这样做就会使用它:

var pg = require('pg');

要获取SSL,您需要使用本机绑定:

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

当您的应用在Heroku中运行时,需要使用SSL,您只需要使用SSL进行远程连接(当您的应用在本地运行时)。

答案 2 :(得分:17)

我添加了这些参数,现在可以从外部服务器连接到我的heroku postgres实例,特别是在节点快速服务器中配置knex.js:

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

答案 3 :(得分:8)

遇到同样的问题。刚刚在db params中启用了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();

答案 4 :(得分:3)

自己动手,这是一个简单的修复。只需通过HTTPS连接

答案 5 :(得分:1)

我在 2021 年 4 月的 Heroku PRODUCTION 实例中也收到了 'ClientAuthentication' no pg_hba.conf entry 错误。我曾经并将继续使用“Hobby Dev”计划免费帐户。

Heroku 于 2021 年 2 月开始对平台进行更改,对所有 Heroku Postgres 客户端连接强制实施 SSL。 All Heroku Postgres client connections require SSL

我通过在使用 node-postgres v8 时添加以下配置 ssl: { rejectUnauthorized: false } 修复了我的 PRODUCTION 实例(我的 NextJS 应用程序连接到 Heroku Postgres 插件的位置):

const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
  ssl: {
    rejectUnauthorized: false
  }
});