1. 前言
在mongodb 3.4版本中,有一些新的安全机制被引入,其中之一便是默认启用鉴权,这会对一些远程连接和应用程序的正常运行造成影响。本篇文章将针对在mongodb 3.4下远程连接中可能出现的认证失败问题提出解决方法。
2. 问题描述
在连接mongodb 3.4数据库时,如果出现以下错误信息,说明连接认证失败:
MongoDB shell version v3.4.0
connecting to: mongodb://127.0.0.1:27017
2017-02-23T14:16:38.356+0800 E QUERY [thread1] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1441:20
@(auth):6:1
@(auth):1:2
exception: login failed
3. 可能的原因
在mongodb 3.4版本中引入的鉴权机制,需要在进行远程连接时提供相应的身份认证信息。如果没有提供正确的身份信息,就会导致连接认证失败。
具体来说,可能的原因包括以下几点:
3.1 用户名或密码不正确
在进行远程连接时,需要提供正确的用户名和密码。如果用户名或密码错误,会导致连接认证失败。
3.2 没有启用远程访问权限
默认情况下,mongodb是不允许远程访问的,需要在启动时指定--bind_ip参数以开放远程访问权限。
3.3 没有创建正确的用户
在进行身份认证时,需要提供正确的用户信息。如果没有创建正确的用户(包括用户名和密码),就会导致连接认证失败。
4. 解决方法
根据以上可能的原因,可采取以下解决方法:
4.1 确认用户名和密码
确认远程连接时使用的用户名和密码是否正确。可以通过以下方式来验证:
在mongod配置文件中设置security.authorization为enabled。
重启mongod服务。
使用mongo shell连接到mongodb。
输入以下命令:
use admin
db.auth("用户名","密码")
如果认证成功,说明用户名和密码是正确的。如果仍然连接不上,可能是其他原因导致的。
4.2 开放远程访问权限
如果mongod服务所在机器有多个网卡或IP地址,可以通过--bind_ip参数来指定允许访问的IP地址。可以指定一个IP地址或多个IP地址(用逗号分隔),也可以指定0.0.0.0表示允许所有IP访问。例如:
mongod --bind_ip 192.168.0.1,192.168.0.2
这样就只允许IP地址为192.168.0.1和192.168.0.2的客户端访问mongod服务。
4.3 创建正确的用户
在进行身份认证时,需要提供正确的用户信息。可以通过以下方式来创建新用户:
在mongod配置文件中设置security.authorization为enabled。
重启mongod服务。
使用mongo shell连接到mongodb。
输入以下命令(注意:新用户创建在admin数据库下):
use admin
db.createUser(
{
user: "username",
pwd: "password",
roles: [ { role: "readWrite", db: "test" } ]
}
)
这样就创建了一个名为username,密码为password的用户,并且该用户在test数据库中具有readWrite权限。
5. 总结
在mongodb 3.4中,引入了新的安全机制,需要进行身份认证才能进行远程连接。当出现连接认证失败的问题时,需要确认用户名和密码、开放远程访问权限以及创建正确的用户三个方面。
最后提醒大家,在进行身份认证时,密码应该是足够强壮的,以避免被破解或盗用。