mongodb 3.4下远程连接认证失败的解决方法

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中,引入了新的安全机制,需要进行身份认证才能进行远程连接。当出现连接认证失败的问题时,需要确认用户名和密码、开放远程访问权限以及创建正确的用户三个方面。

最后提醒大家,在进行身份认证时,密码应该是足够强壮的,以避免被破解或盗用。

数据库标签