【问题标题】:MongoDB permissions: restrict access to two databasesMongoDB权限:限制访问两个数据库
【发布时间】:2015-12-30 14:33:22
【问题描述】:

我正在尝试对我的 MongoDB 服务器实施一些限制:

我的服务器上的两个数据库在删除/删除操作方面应该受到限制——应该只允许一个特殊的用户帐户这样做。所有其他数据库都应该完全不受限制(当然不包括 admin 数据库):

我尝试使用两个用户来模拟这种情况:

       |   database A & B   |  all the other databases |
---------------------------------------------------------
user a |    read & write    |       read & write       |
user b |      read-only     |       read & write       |

使用readAnyDatabaserole 可以轻松让每个人都阅读所有数据库。 但是,用户 b 只能读取数据库 A 和 B 但对所有其他数据库(包括稍后创建的数据库)具有读写访问权限的建模让我很头疼。

如何在 MongoDB 中实现这种安全模型?

【问题讨论】:

  • 所以简而言之,您希望 User B 具有在特定数据库上只读的有限功能?
  • 是的。但同时,该用户应该对当前存在和将来存在的所有其他数据库(包括用户 b 创建的数据库)拥有完全权限。

标签: mongodb permissions roles


【解决方案1】:

首先在您的mongodb.conf 文件中启用身份验证

auth = true

创建一个数据库perm 用于保存我们将在下面创建的用户权限。

use perm

然后创建具有DatabaseADatabaseB 只读权限的userb

db.createUser(
    {
      user: "userb",
      pwd: "12345",
      roles: [
         { role: "read", db: "DatabaseA" },
         { role: "read", db: "DatabaseB" }
      ]
    }
)

userb 将只被允许读取DatabaseADatabaseB 其余所有数据库访问用户b 将是read-write

现在userb 可以使用以下命令登录

mongo --port 27017 -u userb -p 12345 --authenticationDatabase perm

【讨论】:

  • userb 对 DatabaseA 和 DatabaseB 具有读取权限,但其他数据库呢?在我的问题中,我写道我需要 userb 才能读取和写入其他数据库。使用由所示命令创建的 userb 不起作用,因为 userb 无权访问任何其他数据库。
【解决方案2】:

这是不可能的。

您可以组合多个角色并从多个数据库继承它们,但是:

授予角色后,用户将获得该角色的所有权限。 一个用户可以同时拥有多个角色,在这种情况下,用户 接收各个角色所有权限的联合

-

角色始终授予权限,从不限制访问。例如,如果 用户在数据库上同时具有 readreadWriteAnyDatabase 角色,则更大的访问权限为准。

你可以在mongodb authorization doc找到这些段落。

为了对所有未来的数据库进行读写,您需要将readWriteAnyDatabase 角色设置为 userb。这意味着,对于 A 和 B 数据库,您不能降级为 read 角色。

恐怕你需要为新的数据库手动设置角色。

【讨论】:

    【解决方案3】:

    你应该使用

    security:
        authorization: enabled
    

    而不是 auth = true,至于其余的 Rohit 回答完成了这项工作。

    另请参阅:https://stackoverflow.com/a/33325891/1814774

    【讨论】:

    • auth=true 是 mongodb.conf 的旧/旧格式,security: authorization: enabled 是 yaml 中的新格式。可以使用任何一种格式,并且仍然使用较旧的格式,例如,我在 Ubuntu 20.04 中的 apt 中的 mongodb 3.6.8 中使用较旧的格式。 stackoverflow.com/questions/25517872/…
    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 2010-10-03
    • 2013-01-26
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多