为什么我在将 NodeJS 应用程序连接到 aws rds Postgres 时收到错误:没有 pg_hba.conf?

问题描述 投票:0回答:1

我已经在数据库上创建了 RDS Postgres 的实例。我正在尝试在我的 Node.js 应用程序中将它用作远程数据库。连接到数据库所需的内容包括端点、用户名、密码、端口,我已经拥有了所有这些。以下是我在 .env 文件中存储 URL 的方式:

POSTGRES_URL=postgres://<username>:<password>@<end-point>:5432/<db>

在我的节点应用程序中,我已配置数据库如下:

数据库.ts

import { Sequelize } from 'sequelize';

const dbUrl:string = process.env.POSTGRES_URL || '';

const sequelize: Sequelize = new Sequelize(dbUrl, {
    dialect: 'postgres',
});

export default sequelize;

index.ts

import sequelize from "./config/database";
const connectDB = async (): Promise<void> => {
    try {
        await sequelize.authenticate();
        console.log('DB connected successfully.');
    } catch (error) {
        console.error('Unable to connect to the database:', error);
    }
};
//connect db then run server
connectDB().then(() => {
    app.listen(process.env.PORT, (): void => {
        console.log(`Server is running on port ${process.env.PORT}`);
    });
});

当我运行 cmd

npm run dev
时,我收到如下错误:

original: error: no pg_hba.conf entry for host <my-ip>, user <username>, database <db>, no encryption.  
at Client._connectionCallback (/<path>/node_modules/sequelize/src/dialects/postgres/connection-manager.js:196:24)

上面 <> 符号内的所有变量与 URL 中的相同。

我尝试使用以下命令通过 Ubuntu 终端运行 db:

psql --host=<end-point> --port=5432 --username=<username> --password

它要求输入密码,当我输入密码时,它会启动,没有任何错误。 问题仅出现在 Nodejs 应用程序中。

postgresql sequelize.js amazon-rds pg-hba.conf
1个回答
0
投票

该错误意味着客户端已到达服务器,但由于某种原因身份验证失败(

pg_hba.conf
是定义如何对客户端进行身份验证的配置文件)。 PostgreSQL 为您提供此通用错误消息,以便攻击者无法收集太多信息。

您应该查看 PostgreSQL 服务器的日志;它应该包含相应的错误消息,可以提供更详细的信息。如果您在那里发现相同的错误消息,则说明其含义为:

pg_hba.conf
中没有与传入连接请求匹配的条目,因此连接被拒绝。

© www.soinside.com 2019 - 2024. All rights reserved.