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

Rob*_*ert 6 permissions roles mongodb

我试图在我的MongoDB服务器上实现一些限制:

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

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

       |   database A & B   |  all the other databases |
---------------------------------------------------------
user a |    read & write    |       read & write       |
user b |      read-only     |       read & write       |
Run Code Online (Sandbox Code Playgroud)

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

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

小智 1

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

auth = true
Run Code Online (Sandbox Code Playgroud)

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

use perm
Run Code Online (Sandbox Code Playgroud)

然后userb使用只读权限创建DatabaseADatabaseB

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

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

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

mongo --port 27017 -u userb -p 12345 --authenticationDatabase perm
Run Code Online (Sandbox Code Playgroud)

  • userb 对 DatabaseA 和 DatabaseB 具有读取访问权限,但是其他数据库呢?在我的问题中,我写道我需要 userb 才能访问其他数据库的读写。使用所示命令创建的 userb 不起作用,因为 userb 无权访问任何其他数据库。 (2认同)