我们正致力于在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的问题在哪里?感谢您的阅读,并提前感谢您的帮助!