在mongodb上的角色-即使未经授权的用户也可以插入

时间:2019-09-28 22:29:11

标签: mongodb

我创建2个db,每个db中有一个用户,但是用户2可以插入db1中吗?

use shop
db.createUser({user: "appdev",pwd:"appdev", roles:["readWrite"]})
db.auth("appdev","appdev")
show collections
db.products.insertOne({name: "A book for appdev"})

db.logout()

use shop2
db.createUser({user: "appdev2",pwd:"appdev2", roles:["readWrite"]})
db.auth("appdev2","appdev2")
show collections
db.products.insertOne({name: "A book for appdev2"})

在这里,我仍然以appdev2身份登录,并且可以在db shop上插入。

use shop
db.products.insertOne({name:"i-am-appdev2"})
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5d8fdba878f7555a2060f1ec")
}

1 个答案:

答案 0 :(得分:2)

如果您的笔录正确无误,则看起来像这样:

  • 您没有通过在mongod配置中将security.authorization设置为true或以mongod开头--auth的方式来enabled access control

  • 您以特权用户身份登录(因为您可以在同一会话中运行db.createUser())。

要在mongo shell中研究这些可能性:

  • 确保通过authorization的输出启用db.serverCmdLineOpts()。如果启用了访问控制,则parsed服务器配置选项的输出应包括如下部分:
    "security" : {
        "authorization" : "enabled"
    },
  • 通过db.runCommand({connectionStatus:1})检查当前会话的用户和角色。如Authenticate a User中所述:

      

    以不同的用户身份进行多次身份验证不会删除以前已身份验证的用户的凭据。这可能导致连接具有比用户预期更多的权限,并导致逻辑会话内的操作引发错误。

访问控制是与配置基于角色的访问控制(RBAC)分开的选项,以允许重设管理员访问权限之类的方案。多个并发登录提供了附加的权限,但是大多数情况下是从早期版本的MongoDB中访问控制的更简单版本继承而来的。

有关可用安全措施的更多信息,请参阅MongoDB手册中的Security Checklist