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

MongoDB权限:限制对两个数据库的访问,mongodb,permissions,roles,Mongodb,Permissions,Roles,我试图在我的MongoDB服务器上实现一些限制: 关于删除/删除操作,我的服务器上的两个数据库应该受到限制-应该只允许一个特殊的用户帐户这样做。所有其他数据库应完全不受限制(当然不包括管理数据库): 我尝试使用两个用户来模拟这种情况: | database A & B | all the other databases | --------------------------------------------------------- user a | r

我试图在我的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中实现此安全模型?

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

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

use perm
然后为
DatabaseA
DatabaseB
创建具有只读权限的
userb

db.createUser(
    {
      user: "userb",
      pwd: "12345",
      roles: [
         { role: "read", db: "DatabaseA" },
         { role: "read", db: "DatabaseB" }
      ]
    }
)
userb
将只允许读取
DatabaseA
DatabaseB
rest所有对userb的数据库访问都将是
读写

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

mongo --port 27017 -u userb -p 12345 --authenticationDatabase perm
这是不可能的

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

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

-

角色总是授予特权,从不限制访问。例如,如果 用户在数据库上同时具有读取读写数据库角色,则以更大的访问权限为准。

您可以在中找到这些段落

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

恐怕您需要手动设置新dbs的角色。

您应该使用

security:
    authorization: enabled
而不是
auth=true
,至于其余部分,Rohit answer完成了任务


另请参见:

简而言之,您希望
用户B
具有在特定数据库上只读的有限功能?是的。但同时,此用户应该对当前存在和将来将存在的所有其他数据库(包括用户b创建的数据库)拥有完全权限。userb具有对DatabaseA和DatabaseB的读取权限,但其他数据库呢?在我的问题中,我写道我需要userb能够读写访问其他数据库。使用所示命令创建的userb,这不起作用,因为userb无权访问任何其他数据库。