【问题标题】:How can I have a secure MongoDB - Mongoose setup?如何拥有安全的 MongoDB - Mongoose 设置?
【发布时间】:2019-11-08 16:53:34
【问题描述】:

我正在开发一个将使用 MongoDB 的 Node.js 应用程序,并且我正在努力使其尽可能安全。

数据库认证

首先,我想限制对数据库的访问,所以我添加了一个身份验证。所以现在,在终端中,我必须像这样登录:

~$ mongo -u <myusername> -p --authenticationDatabase admin

但是,在我的 javascript 中,我必须在以下行中以纯文本形式添加密码:

// Connect to the database 
mongoose.connect('mongodb://localhost/<myDB>?authSource=admin', {user: <myusername>, pass: <mypassword>, useNewUrlParser: true, useUnifiedTopology: true}); 

这让我很不安。这让我想到了第一个问题:如何在代码中没有纯文本密码的情况下限制对数据库的访问?


Mongoose 和 MongoDB 之间

我发现 Mongoose 通过 TCP/IP 与 MongoDB 通信。我运行了一个wireshark,看看我是否可以检测到数据,事实上我可以: screen capture

后端和 MongoDB 可能位于 2 台不同的机器上。这让我想到了最后一个问题:我在这里的多个帖子中看到,有时会建立 SSH 连接,但 这是保护通信安全的最佳方式吗?

【问题讨论】:

  • 环境变量?
  • 如果你想在 TCP 级别保护数据,除了使用环境变量之外,你可以看看在 mongodb SSL/TLS Mongodb 上启用 SSL

标签: node.js mongodb security mongoose


【解决方案1】:

默认情况下,MongoDB 不启用访问控制。在没有访问控制的情况下运行 MongoDB 实例意味着任何可以连接到数据库的人都可以运行命令并可能查看数据库中的所有数据。

在启用访问控制以强制所有用户在连接数据库时进行身份验证后,下一步是配置基于角色的访问控制 (RBAC)。

这是 MongoDB 安全性的清单:https://docs.mongodb.com/manual/administration/security-checklist/

即使在其他 RDBMS 中,提供用户名和密码也是正常的 请在此处查看 MongoDB 的身份验证部分:https://docs.mongodb.com/manual/core/authentication/

还有如何启用身份验证: https://docs.mongodb.com/manual/tutorial/enable-authentication/

要回答您关于通信的第二个问题,您可以查看我发送的链接https://docs.mongodb.com/manual/administration/security-checklist/ 并转到加密通信,它使用 TLS/SSL 来加密 mongod 和 mongos 之间的通信。

问候,

【讨论】:

    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2021-01-24
    • 1970-01-01
    • 2014-02-04
    • 2020-08-13
    相关资源
    最近更新 更多