MongoDB中基于角色的访问控制无法使用自定义角色

时间:2017-11-23 15:35:08

标签: mongodb access-control

我们正致力于在MongoDB中为Web项目开发基于角色的访问控制。到目前为止,我们一直在从shell开始研究角色,以确保数据库在本地运行良好。但是,我们一直面临着一些问题。

我将在这里介绍一个创建的角色。

db.getRole("proposer", {showPrivileges: true})
{
    "role" : "proposer",
    "db" : "mydb",
    "isBuiltin" : false,
    "roles" : [ ],
    "inheritedRoles" : [ ],
    "privileges" : [
        {
            "resource" : {
                "db" : "mydb",
                "collection" : "users"
            },
            "actions" : [
                "find",
                "update"
            ]
        },
        {
            "resource" : {
                "db" : "mydb",
                "collection" : "votes&signatures"
            },
            "actions" : [
                "find"
            ]
        },
        {
            "resource" : {
                "db" : "mydb",
                "collection" : "group&categories&propositions&comments"
            },
            "actions" : [
                "find",
                "insert",
                "remove",
                "update"
            ]
        }
    ],
    "inheritedPrivileges" : [
        {
            "resource" : {
                "db" : "mydb",
                "collection" : "users"
            },
            "actions" : [
                "find",
                "update"
            ]
        },
        {
            "resource" : {
                "db" : "mydb",
                "collection" : "votes&signatures"
            },
            "actions" : [
                "find"
            ]
        },
        {
            "resource" : {
                "db" : "mydb",
                "collection" : "group&categories&propositions&comments"
            },
            "actions" : [
                "find",
                "insert",
                "remove",
                "update"
            ]
        }
    ]

}

正如您在此处所见,此角色不应允许用户在mydb的“users”集合中插入任何数据。至少从我的理解来看。因此,我们创建了一个具有此角色的用户来测试此功能。

> db.getUser("user1")
{
    "_id" : "mydb.user1",
    "user" : "user1",
    "db" : "mydb",
    "customData" : {

    },
    "roles" : [
    {
        "role" : "proposer",
        "db" : "mydb"
    }
    ]
}

但是,当我用这样的用户连接到shell时,我能够在用户集合中插入没有问题的数据,破坏了我们试图实现的控制访问的目的。

mongo --port 27017 -u "user1" -p "password" --authenticationDatabase "mydb"
> db.users.insert({x: 1})
WriteResult({ "nInserted" : 1 })

另外,我尝试按照MongoDB关于Enabling Auth的文档进行操作,但是无法将userAdminAnyDatabase或clusterAdmin登录到myDB,这很奇怪,因为根据我的理解,admin DB中的任何userAdminAnyDatabase都可以访问到其他数据库。

那么,您有什么想法在mongo中实现基于Roled的AC的问题在哪里?感谢您的阅读,并提前感谢您的帮助!

0 个答案:

没有答案