heroku Postgres - sequelize:没有主机的 pg_hba.conf 条目

Dav*_*ien 3 postgresql heroku node.js sequelize.js

我正在尝试使用 Heroku 免费 Postgres 数据库在 Heroku 上托管的 Nodejs 应用程序上运行迁移。

我使用 Sequelize 作为我的 ORM。这是我的生产连接配置。

const dotenv = require('dotenv');

dotenv.config();

module.exports = {
  production: {
    use_env_variable: 'DATABASE_URL',
    dialect: process.env.DIALECT,
    protocol: process.env.DIALECT,
  }
}
Run Code Online (Sandbox Code Playgroud)

当我使用上述配置时,出现以下错误: no pg_hba.conf entry for host "000.000.000.0", user "yyyyyyyyyyyyyy", database "xxxxxxxxxxxxx", SSL off

但是,当我将以下选项添加到配置中时,出现自签名证书错误。

dialectOptions: {
ssl: true
}
Run Code Online (Sandbox Code Playgroud)

请问,我该如何解决这个问题?

小智 10

将您的方言选项更改为:

dialectOptions: {
    ssl: {
        rejectUnauthorized: false
    }
}
Run Code Online (Sandbox Code Playgroud)


Mav*_*101 5

正如此相关答案中所解释的,设置rejectUnauthorized: false是一个坏主意,因为它允许您创建与数据库的非加密连接,因此可能使您遭受 MITM 攻击(中间人攻击)。

更好的解决方案是为您的 Postgres 客户端提供您希望其使用的 CA。就我而言,它是 AWS RDS 在北弗吉尼亚区域 (us-east-1) 使用的 CA。我从此 AWS 页面下载了 CA ,将其放置在与我想要用来连接数据库的文件相同的目录中,然后将我的配置修改为:

{
  ...
  dialectOptions: {
    ssl: {
      require: true,
      ca: fs.readFileSync(`${__dirname}/us-east-1-bundle.pem`),
    },
  },
}
Run Code Online (Sandbox Code Playgroud)