簡體   English   中英

連接到 Heroku PostgreSQL 數據庫時的身份驗證錯誤

[英]Authentication error when connecting to Heroku PostgreSQL database

我正在使用 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 問題,但不應該像這里提到的那樣。 開箱即用應支持 SSL。 所以我很難過,只能問什么可能導致這個錯誤?

我不確定是否必須在我的系統上編輯 pg_hba.conf,但我什至找不到它。

通過在 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 進行遠程連接(當您的應用在本地運行時)。

我添加了這些參數,現在可以從外部服務器連接到我的 heroku postgres 實例,特別是在節點 express 服務器中的 knex.js 配置中:

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

遇到同樣的問題。 剛剛在 db 參數中啟用了 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();

我自己遇到了這個,這是一個簡單的修復。 只需通過 HTTPS 連接即可

我也在 2021 年 4 月在我的 Heroku PRODUCTION 實例中收到了'ClientAuthentication' no pg_hba.conf entry錯誤。我曾經並繼續使用 Plan“Hobby Dev”免費帳戶。

Heroku 於 2021 年 2 月開始對平台進行更改,為所有 Heroku Postgres 客戶端連接強制實施 SSL。 所有 Heroku Postgres 客戶端連接都需要 SSL

我修復了我的 PRODUCTION 實例(我的 NextJS 應用程序連接到 Heroku Postgres 插件),方法是在使用node-postgres v8時添加以下配置ssl: { rejectUnauthorized: false }

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

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

我剛剛通過將ssl: { rejectUnautorized: false }添加到我的數據庫配置中解決了這個問題。 另外,運行heroku config:set PGSSLMODE=no-verify -a appName

注意:“appName”應該是您托管的應用程序的名稱

有同樣的問題。 這對我有幫助。

new Sequelize(process.env.DATABASE_URL, {
    dialectOptions: {
      ssl: {
        require: true,
        rejectUnauthorized: false
      }
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM