我正在研究如何将后端api (next.js/api)设置为由heroku托管的数据库(postgresql)。
在pg.pool的调解下,我设置了以下代码。
const pool = new Pool(
{
connectionString: process.env.DATABASE_URL,
// ssl: {
// rejectUnauthorized: false,
// }
})但是heroku返回了以下错误:
sql_error_code = 28000 FATAL: no pg_hba.conf entry for host "122.180.247.11", user "u3idolso5k2v83", database "dc85788d13v9ej", SSL off
错误描述来自:https://help.heroku.com/DR0TTWWD/seeing-fatal-no-pg_hba-conf-entry-errors-in-postgres
编辑:打算发布这个链接,Is it ok to be setting rejectUnauthorized to false in production PostgreSQL connections?
身份验证失败,因为连接没有使用SSL加密:(SSL )。所有Heroku Postgres生产数据库都需要使用SSL连接,以确保应用程序和数据库之间的通信保持安全。如果客户端没有使用SSL连接到数据库,即使使用正确的凭据连接到数据库,也会看到这些错误。
我觉得这很奇怪,因为heroku已经为我的服务器提供了默认的ssl,所以发生这样的错误是出乎意料的?
我在网上遇到的侧步解决方案是取消connection...which中的ssl属性注释,但我对此感到不安。
const pool = new Pool(
{
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false,
}
})如前所述,从这里开始它是不安全的:https://security.stackexchange.com/questions/229282/is-it-safe-to-set-rejectunauthorized-to-false-when-using-herokus-postgres-datab
我不明白为什么会发生这个错误,以及如何用适当的安全性来修复它。
发布于 2021-11-24 23:50:47
对于Postgres服务器来说,SSL证书是非常标准的无效证书。即使是官方的postgres客户端也不验证证书。您使用的库默认用于验证证书,但在很大程度上属于少数。
在为https://www.atdatabases.org/docs/pg-options设置这一设置时,我使它在默认情况下不验证证书以匹配Postgres的标准行为。
这使您可以使用以下简单方法为heroku创建一个连接池:
import createConnectionPool from '@databases/pg';
createConnectionPool(process.env.DATABASE_URL);发布于 2021-11-25 00:09:27
正如您在链接中所描述的,要回答,您可以升级到Heroku的付费产品之一,该产品确实支持此功能。或者你可以停止使用Heroku。或者你可以忍受难以置信的低风险,有人会把你。
我不明白为什么会发生这个错误,
那你不明白吗?你联系到的解释似乎很清楚。如果你无法比目前为止更清楚地表述你的不确定性,那么有谁能帮助你理解呢?
https://stackoverflow.com/questions/70103885
复制相似问题