MongoDB权限:限制对两个数据库的访问

时间:2015-10-02 11:28:16

标签: mongodb permissions roles

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

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

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

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

使用readAnyDatabase角色可以轻松地让所有人阅读所有数据库。 然而,用户b的建模只能读取数据库A& B但是已阅读&对所有其他数据库(包括稍后创建的数据库)的写访问权让我头疼。

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

3 个答案:

答案 0 :(得分:2)

这是不可能的。

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

  

授予角色后,用户将获得该角色的所有权限。   用户可以同时拥有多个角色,在这种情况下是用户   获得相应角色的所有权限的联盟

-

  

角色始终授予权限,从不限制访问权限。例如,如果   用户在数据库上同时拥有读取 readWriteAnyDatabase 角色,更高的访问权限优先。

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

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

我担心您需要为新dbs手动设置角色。

答案 1 :(得分:0)

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

auth = true

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

use perm

然后使用userbDatabaseA的只读权限创建DatabaseB

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

userb只会被允许阅读DatabaseADatabaseB其他所有数据库访问userb将是read-write

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

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

答案 2 :(得分:0)

你应该使用

security:
    authorization: enabled

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

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