我有以下问题。我使用以下语句创建了一个 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
文件的未注释(几乎)部分,我们可以在 these instructions 之后找到,如下所示:
# 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
代替,如 pg_hba.conf
文件中所述:
# Note that "password" sends passwords in clear text; "md5" or
# "scram-sha-256" are preferred since they send encrypted passwords.
老实说,我不知道我应该在哪里更改它。 ¯\_(ツ)_/¯。所以我将所有这些(methods
更改为 password
)并且它起作用了 :) 它现在需要密码。
最佳答案
检查您的 pg_hba.conf
内容,它可能被配置为不需要本地主机连接的密码。
尝试使用本地 IP 地址,您可能会发现它的行为有所不同。或者尝试从同一网络上的另一个系统连接。
关于node.js - Node JS/PostgreSQL。我可以使用任意/任何密码进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56534815/