为什么我的数据库没有密码时 Knex.js 密码验证失败?
Why Is Knex.js Failing on Password Authentication When My Database Has No Password?
我正在尝试使用 Knex 连接到我的数据库,如下所示:
const client = knex({
client: 'postgresql',
connection: {
host: '127.0.0.1',
user: 'me',
database: 'my_db'
}
});
client('some_table').then(console.log);
当我创建数据库时(在命令行中使用 createdb my_db
)我没有设置密码。在命令行我可以 运行 psql -d my_db
并且它工作得很好。
但是,当我尝试使用 Knex 时,出现错误:
Unhandled rejection error: password authentication failed for user "me"
无论我设置 null
密码、空字符串 (''
) 密码,还是完全不配置该字段,都会发生这种情况。
任何人都可以解释为什么 Knex 坚持密码验证失败......当没有密码时(以及我什么时候可以在命令行中没有密码就可以连接)?
PostgreSQL 不允许基于 presence/absence 密码登录。相反,所有登录身份验证都是通过 pg_hba.conf
处理的。在您的特定情况下——创建没有密码的 me
用户(或使用 null
或 ''
,如您所描述的那样)——缺少密码不一定允许您的用户登录。事实上,不设置密码将不允许该用户登录,除非 pg_hba.conf
设置为某些无密码设置(即 peer
或 trust
)。
如果你想 me
用户无密码登录(我假设是为了 testing/development 目的,因为无密码登录在生产中不是好的安全实践),你可以简单地设置trust
级身份验证 pg_hba.conf
:
#conn_origin database user ip_mask auth_method
host all me 0.0.0.0/0 trust
实现无密码身份验证的更安全方法是使用 .pgpass
文件或设置 PGPASSWORD
环境变量。看到您正在尝试使用 knex.js,您最好像上面那样调整 pg_hba.conf
。再一次,我不知道你的意图是什么,但请注意安全 ;)
披露:我为 EnterpriseDB (EDB)
工作
我正在尝试使用 Knex 连接到我的数据库,如下所示:
const client = knex({
client: 'postgresql',
connection: {
host: '127.0.0.1',
user: 'me',
database: 'my_db'
}
});
client('some_table').then(console.log);
当我创建数据库时(在命令行中使用 createdb my_db
)我没有设置密码。在命令行我可以 运行 psql -d my_db
并且它工作得很好。
但是,当我尝试使用 Knex 时,出现错误:
Unhandled rejection error: password authentication failed for user "me"
无论我设置 null
密码、空字符串 (''
) 密码,还是完全不配置该字段,都会发生这种情况。
任何人都可以解释为什么 Knex 坚持密码验证失败......当没有密码时(以及我什么时候可以在命令行中没有密码就可以连接)?
PostgreSQL 不允许基于 presence/absence 密码登录。相反,所有登录身份验证都是通过 pg_hba.conf
处理的。在您的特定情况下——创建没有密码的 me
用户(或使用 null
或 ''
,如您所描述的那样)——缺少密码不一定允许您的用户登录。事实上,不设置密码将不允许该用户登录,除非 pg_hba.conf
设置为某些无密码设置(即 peer
或 trust
)。
如果你想 me
用户无密码登录(我假设是为了 testing/development 目的,因为无密码登录在生产中不是好的安全实践),你可以简单地设置trust
级身份验证 pg_hba.conf
:
#conn_origin database user ip_mask auth_method
host all me 0.0.0.0/0 trust
实现无密码身份验证的更安全方法是使用 .pgpass
文件或设置 PGPASSWORD
环境变量。看到您正在尝试使用 knex.js,您最好像上面那样调整 pg_hba.conf
。再一次,我不知道你的意图是什么,但请注意安全 ;)
披露:我为 EnterpriseDB (EDB)
工作