我正试图使用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时,我会得到一个错误:
未处理的拒绝错误:用户"me“密码身份验证失败
无论是设置null
密码、空字符串(''
)密码,还是将字段完全排除在配置之外,都会发生这种情况。
有谁能解释一下为什么康耐视坚持不通过密码认证.当没有密码时(当我可以在命令行没有密码的情况下连接时)?
发布于 2020-01-19 07:58:32
PostgreSQL不允许基于密码的存在或缺失进行登录。相反,所有登录身份验证都是通过pg_hba.conf
处理的。在您的特殊情况下--创建没有密码的me
用户(或者使用null
或''
,正如您所描述的那样)--没有密码并不一定允许用户登录。事实上,不设置密码将不允许该用户登录,除非pg_hba.conf
被设置为无密码设置(即peer
或trust
)。
如果您想要me
用户的无密码登录(我假设出于测试/开发目的,因为在生产中使用无密码登录并不是一个好的安全实践),您可以简单地在pg_hba.conf
中设置trust
-level身份验证。
#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)工作
https://stackoverflow.com/questions/59806028
复制相似问题