我的机器上有一个新的mongodb服务器(2.6.0),我使用以下配置文件启动了mongod实例:
dbpath = c:\mongo\data\db
port = 27017
logpath = c:\mongo\data\logs\mongo.log
auth = true
后来,我通过mongo shell连接到这个mongod实例,并创建了一个管理员用户:
use admin
db.createUser(
{
user: "tugberk",
pwd: "12345678",
roles:
[
{
role: "userAdminAnyDatabase",
db: "admin"
}
]
}
)
然后,我从shell注销并使用以下命令重新连接:
mongo --host localhost --port 27017 -u tugberk -p 12345678 --authenticationDatabase admin
然后,我创建了一个具有root访问权限的用户:
use admin
db.createUser(
{
user: "tugberkRoot",
pwd: "12345678",
roles: [ "root" ]
}
)
此处不需要最后一步,但现在应该完全禁用匿名访问。但是,我仍然可以通过mongo shell匿名连接它(即使我没有任何访问权限):
如何防止匿名连接?
答案 0 :(得分:21)
身份验证阻止您对数据库执行操作(如屏幕截图所示 - 您甚至无法列出数据库),它不会阻止连接 - 毕竟,您必须能够连接到能够验证。
有一个feature request to add timeouts,但目前这基本上就是服务器的行为方式。
值得注意的是,在您尝试做某事之前,这与仅使用telnet
连接到端口没有什么不同 - 开头显示的文本"连接到: "等等来自客户端,而不是服务器。一旦它尝试执行任何未经身份验证的操作,甚至列出服务器警告,就会抛出错误,因为它没有足够的权限。
如果要从连接角度锁定内容,MongoDB透视图中唯一的选项是使用bindIp
选项限制它侦听的IP地址(默认为all)。例如,使用127.0.0.1
将其锁定为本地使用(但您将无法从远程主机连接),这会使复制成为问题,因此在选择绑定地址时要小心。
在MongoDB之外,您应该从防火墙的角度来看待锁定问题。在Linux上,这将是IPTables,ufw,hosts.allow/deny或类似的。 Windows防火墙不是我的专业领域,但我想你也可以在那里做类似的事情。
答案 1 :(得分:0)
尽管您可以通过在mongo.conf文件的security部分中启用身份验证来保护数据库,如下所示:
security:
authorization: enabled