通过节点 pg 连接到 azure flexible postgres 服务器

Connecting to azure flexible postgres server via node pg

我正在使用 Azure 的免费订阅并成功创建了一个 Ubuntu 服务器和一个灵活的 Postgres 数据库。

直到最近,我才直接从我的 Windows 10 桌面访问数据库。现在我想通过 Ubuntu 服务器路由所有访问。

为此,我在我的 Windows 10 机器上安装了 Open SSH 客户端和 Open SSH 服务器,并使用 ssh -L 12345:[DB IP]:5432 my_user@[Ubuntu IP]

完成了必要的本地端口转发

连接正常,我在桌面上用 pgcli 确认了 pgcli -h 127.0.0.1 -p 12345 -u my_user -d my_db

但是当我尝试通过 node-pg 连接时,我收到以下错误

UnhandledPromiseRejectionWarning: error: no pg_hba.conf entry for host "[Ubuntu IP]", user "my_user", database "my_db", SSL off

我已经使用 [Ubuntu IP] 在 Azure 中添加了防火墙规则,但错误仍然存​​在。更让我烦恼的是,在数据库的 Azure 门户中,我启用了“允许 public 从 Azure 中的任何 Azure 服务访问此服务器”,因此此连接甚至不需要额外的防火墙。

上周,我一直坚持这个,现在终于建立了连接,但我的代码无法访问。非常令人沮丧。我很高兴收到有关如何解决此问题的任何指示。

编辑#1:

我无法 post pg_hba.conf 文件。由于 Postgres DB 由 Azure 管理,我无法访问 pg_hba,这使得情况更难理解。

我的 node.js 测试连接的代码:

const pg = require("pg");
const passwd = "...";

const client = new pg.Client({
    user: 'admin',
    host: '127.0.0.1',
    database: 'test',
    password: passwd,
    port: 12345
});
client.connect()

client.on('uncaughtException', function (err) {
    console.error(err.stack);
});

const query = "SELECT * FROM test";
try {client.query(query, (err,res) => {
    if (err) {
        console.error(err);
    }
    console.log(res);
})}
catch (e) {
    console.error(e)
}

@jjanes 的评论帮助我理解了这个问题,谢谢。

经过编辑的 pg.Client 配置解决了我的问题:

const client = new pg.Client({
    user: 'admin',
    host: '127.0.0.1',
    database: 'test',
    password: passwd,
    port: 12345,
    ssl: {rejectUnauthorized: false}
});

我在这里找到了这个特定的 SSL 选项 https://node-postgres.com/features/ssl