我的机器中有一个新的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匿名连接到它(即使我没有做任何事情的权限):

在此处输入图像描述

我应该怎么做来防止任何匿名连接?

推荐答案

身份验证会阻止您对数据库执行操作(如屏幕截图所示,您甚至无法列出数据库),它不会阻止连接——毕竟,您必须能够连接才能进行身份验证.

有一个feature request to add timeouts,但目前这基本上是服务器的行为方式.

值得注意的是,在您try 执行某些操作之前,这实际上与仅使用telnet连接到端口没有什么不同-开始"连接到:"等处显示的文本来自客户端,而不是服务器.一旦它试图做任何未经验证的事情,甚至列出服务器警告,就会抛出一个错误,因为它没有足够的权限.

如果想从连接的Angular 锁定,MongoDB的唯一选项是使用bindIp选项限制它侦听的IP地址(默认为all).例如,使用127.0.0.1会将其锁定为本地使用(但您将无法从远程主机连接),这使得复制成为一个问题,因此在 Select 绑定地址时要小心.

在MongoDB之外,您应该从防火墙的Angular 来看待锁定问题.在Linux上,这将是IPTablesufwhosts.allow/deny或类似的值.Windows防火墙不是我的专业领域,但我想你也可以在那里做类似的事情.

Mongodb相关问答推荐

如何将数组$拉到对象数组下

如何在MongoDB中使用Aggregation来计算两个键相同但字段不同的对象数组的总值,并将其合并为一个?

如何在Golang保存到MongoDB时排除空数据值的问题?

当日期和时间在不同键的字符串中时,Mongo 查询过滤今天的数据

Mongo,通过 Lookup 计算多个文档中数组中的项目

如何向所有文档添加一个字段,其中前 100 个文档的值为 1,接下来的 100 个文档的值为 2,依此类推?

随着时间的推移在 mongodb 中获得

从 MongoDB 中的聚合结果中获取不同的值

如何在 Mongoose 中定义一个通用的嵌套对象

Mongo 无法启动

我怎样才能排序空值在 mongodb 中是最后排序的?

使用 nodejs/mongoose 部分更新子文档

使用 brew upgrade Mongo update from 3.4 to 4.0 报错:在try 升级到 4.0 之前,数据文件需要完全升级到 3.6 版

如何在 MongoDB 聚合查询中使用 $hint?

Mongo按实际上是数字的字符串值排序

Mongoose / MongoDB 用户通知方案建议

使用 Node.js 将许多记录插入 Mongodb 的正确方法

带有索引字段的 MongoDB 正则表达式

MongoDb:聚合 $lookup 过滤外部文档

Mongodb同时在多个字段上聚合(计数)