NodeJS / PostgreSQL。我可以使用任意/任意密码进行身份验证

时间:2019-06-10 23:57:09

标签: node.js postgresql

我有以下问题。我使用以下语句创建了PostgreSQL用户app

CREATE USER app WITH ENCRYPTED PASSWORD 'qwerty';

然后我在数据库bazy中为其赋予了一些特权。

然后,我通过以该用户身份验证并使用pg这样的模块来访问数据库:

const { Pool } = require('pg');

(async function() {
    let pool = new Pool({
        user: "app",
        host: 'localhost',
        database: "bazy",
        password: "BS",
        port: 5432
    });
    let client = await pool.connect();
    let { rows } = await client.query("SELECT 'I love you';");
    console.log(rows);
})();

问题是这可以正常工作并提供以下输出:

[ { '?column?': 'I love you' } ]

但这不起作用,因为用户的密码是qwerty,而不是BS。问题是任何密码都可以在这里使用。

我做错了什么?

[编辑]

@ mike.k的答案是100%有帮助的。

pg_hba.conf文件中未注释的(几乎)部分如下所示:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

我们可以在这里看到此处列出的任何类型的连接中都不需要密码,对于方法trust来说,为了连接到这些用户,我们不需要任何密码(显然,它被忽略了),为了更改,我们可以使用方法passwordmd5scram-sha-256来代替,如these instructions文件中所述:

# Note that "password" sends passwords in clear text; "md5" or
# "scram-sha-256" are preferred since they send encrypted passwords.

说实话,不过,我不知道应该在哪里进行更改。 \ _(ツ)_ /¯。因此,我将所有它们(从methods更改为password)都奏效了:)它现在需要密码。

1 个答案:

答案 0 :(得分:3)

检查您的pg_hba.conf内容,它可能被配置为不需要密码来进行本地主机连接。

尝试使用本地IP地址,您可能会发现它的行为有所不同。或者尝试从同一网络上的另一个系统进行连接。