1

MongoDB 版本:2.4.5

在 mongodb 配置中启用 auth=true。我仍然可以从远程主机连接到 mongodb 实例。它确实强制执行身份验证,因为我无法执行大多数查询,因为我获得了“未经授权”的访问权限,但我仍然可以运行查询以获取有关服务器的信息,例如版本等。我希望服务器在身份验证时拒绝没有凭据的连接已启用。

4

2 回答 2

4

是的,基本上你可以在没有身份验证的情况下连接,但几乎不能做任何事情。你可以跑db.serverBuildInfo()

db.version()

db.adminCommand({ping:1})

db.adminCommand({whatsmyuri:1})

db.adminCommand({features:1})

例如,也许是其他一些命令。

对我来说似乎有点痛苦的是能够运行:

for(var i=0;i++<20000;){db.adminCommand({forceerror:1})}

这会产生一些日志。

我检查了来源,你可以看到这种行为是一种错误。shell启动的来源在:https ://github.com/mongodb/mongo/blob/master/src/mongo/shell/dbshel​​l.cpp

基本上有两种类型的测试针对 mongoshell 的密码和用户名参数中给出的参数值运行。启动检查您何时提供了 --password 参数并且之后没有写入密码。并且当您没有指定在没有 db 的情况下启动时进行检查,并且您指定的用户名长于 0,而不是尝试进行身份验证(检查第 1043 行)

if (!nodb && username.size()).

但仅此而已。如果您根本没有指定凭据,它似乎会连接而无需尝试进行身份验证。我想在初始化阶段应该检查我们连接的过程是否正在运行身份验证,并在需要时强制退出身份验证。

于 2013-09-04T09:52:56.977 回答
0

您是否创建了管理员用户?

身份验证要求 admin 数据库中至少有一个管理员用户。您可以在启用身份验证之前或启用身份验证之后创建用户。

来自http://docs.mongodb.org/manual/tutorial/enable-authentication/

于 2013-09-04T10:50:56.927 回答