我有以下问题。我使用以下语句创建了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
来说,为了连接到这些用户,我们不需要任何密码(显然,它被忽略了),为了更改,我们可以使用方法password
或md5
或scram-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
)都奏效了:)它现在需要密码。
答案 0 :(得分:3)
检查您的pg_hba.conf
内容,它可能被配置为不需要密码来进行本地主机连接。
尝试使用本地IP地址,您可能会发现它的行为有所不同。或者尝试从同一网络上的另一个系统进行连接。