1

我对 MongoDB 安全性的信心动摇了,我希望它会恢复并解释我做错了什么......

我已经像这样创建了 MongoDB 的 Windows 服务:

mongod --logpath "C:\mongoDB\logs" --logappend --dbpath "C:\mongoDB\data\db" --serviceName MongoDB --serviceDisplayName "Mongo DB" --port 27017 --auth --install

然后我创建了一个数据库并将管理用户添加到该数据库的 system.users 集合中。

然后我将一些随机信息填充到我创建的测试集合中。

到目前为止,一切都很好,只有拥有管理员凭据才能访问数据库......

现在重要的部分...

我删除了这样的服务:

mongod --remove --serviceName "MongoDB"

然后我重新创建了服务,但没有像这样的身份验证:

mongod --logpath "C:\mongoDB\logs" --logappend --dbpath "C:\mongoDB\data\db" --serviceName MongoDB --serviceDisplayName "Mongo DB" --port 27017 --noauth --install

令我惊讶的是,我现在能够访问我现在使用身份验证创建的数据库......

请告诉我我应该做些不同的事情。

4

3 回答 3

5

身份验证发生在守护程序级别,而不是数据库级别。数据本身没有加密或其他访问控制。如果您在不需要凭据的情况下运行该服务,那么正如预期的那样,连接和使用它不需要凭据。

这通常不被认为是有问题的,就像您可以访问服务器并且可以修改守护程序一样,根据定义,您无论如何都可以访问数据文件。

于 2012-11-07T19:02:25.317 回答
1

没有身份验证意味着您不必提供凭据:

无认证

Default: true

Disable authentication. Currently the default. Exists for future compatibility and clarity.

For consistency use the auth option.

资源

您犯的配置错误是您禁用了数据库中的任何身份验证措施。

于 2012-11-07T18:59:57.867 回答
0

出色地...

因为如果我们用文本编辑器编辑数据库文件,我们可以看到存储的信息,你是对的,信息没有加密。

在我看来,按照这种想法顺序,在安全数据库上执行 mongodump 或 mongorestore 命令时指定用户和密码是多余的。让我们面对现实吧,如果一个恶意的管理员对导出数据感兴趣,他可以自己编辑数据库文件,当然还有更多的工作:P

我知道身份验证是在数据库级别而不是实例本身(通过管理数据库),但我认为对于一个恶意的用户来说很容易再次获取数据库信息,因为他不需要指定身份验证来删除 Windows服务...

感谢您的意见!

于 2012-11-08T10:06:41.927 回答