【问题标题】:How to deny collection insert/update in the server side如何在服务器端拒绝集合插入/更新
【发布时间】:2018-10-02 21:41:48
【问题描述】:

我有一个Meteor 应用程序 (A) 连接到一些生产远程集合(由另一个应用程序 B 使用),我只想要 A 从 B 的集合中读取数据,并且不修改 B 的集合数据(即使修改发生在 B 的服务器端)。
我怎样才能在 A 中做到这一点?

【问题讨论】:

  • 你不能在搜索引擎中输入"mongodb security" 吗?你可以有。然后您可能已经意识到“数据库管理”对于编程站点来说是“离题”。您可以在dba.stackexchange,com 上询问可能有答案的地方,但实际上阅读文档“应该”为您解决这个问题。另外请不要将标签名称作为问题标题的一部分。无论如何,您问题上的标签都会作为元数据包含在搜索引擎中。
  • 哦,在 dba 网站上查看答案:Mongodb restrict access on collections level 当然,它只是指向文档。有示例用法。
  • 嗨@NeilLunn,感谢有关标签名称的建议。关于这个问题,有两件事:1.我在询问特定于 Meteor 的解决方案,2.我想知道如何在应用程序 A 内部执行此操作,因为我不想弄乱应用程序 B 的 mongo 配置。
  • 编写“代码”以授权访问功能(或为您的应用程序加载插件)是一种选择,但它似乎不“适合”“块 A 来自 B 等”。如果您花点时间实际阅读手册,我想您会发现它确实完全符合您的要求,只需为每个“应用程序”设置不同的用户即可。我现在意识到你可能仍然没有得到的部分是,在“现实世界”中,你的流星应用程序是“只是代码”。实际的 MongoDB 部分将连接到“外部”服务器,而不是开发中使用的每个实例。

标签: mongodb security meteor collections


【解决方案1】:

您可以完全控制 Meteor 应用服务器代码可以在数据库中执行的操作。

为确保您的应用 A 服务器代码无法写入数据库,只需永远不要使用任何集合 insertupdateupsert 方法。

Meteor 的特殊之处在于它还可以允许客户端启动 DB 修改:只需确保删除 insecure 包并从不在服务器代码中使用集合 allow 方法.

现在,对于您的案例,非常简单、防弹和标准实践的解决方案就是为您的应用 A 创建一个不同的数据库用户,只有读取权限,正如 @NeilLunn 所解释的那样。然后,这些不同的数据库用户凭据是您传递给应用程序 A 的 MONGO_URL 变量的一部分,因此这是将应用程序 A 连接到与应用程序 B 相同的远程数据库的唯一方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多