我刚刚将用户身份验证添加到了我的monngodb副本集中,现在我收到了MongoCommandException。当我使用C#驱动程序时,无法执行mongo命令
命令 'listDatabases' 失败:未授权上管理员执行命令{listDatabases:1}(响应:{ “OK”:0.0 “ERRMSG”:“未授权上管理员执行命令{listDatabases:1 }“,”code“:13})
奇怪的是,我可以在终端用相同的用户登录到mongo,它工作得很好。
这里是我的用户:
....
{
"_id" : "admin.rulesEngineDBAdmin",
"user" : "rulesEngineDBAdmin",
"db" : "admin",
"roles" : [
{
"role" : "dbOwner",
"db" : "rules-engine"
},
{
"role" : "clusterAdmin",
"db" : "admin"
}
]
}
....
根据http://docs.mongodb.org/manual/reference/built-in-roles/:
clusterAdmin组合由clusterManager,clusterMonitor授予的权限,
andhostManager ... clusterMonitor提供访问listDatabases命令。
这是当我从终端运行:
rules_engine:PRIMARY> db.auth("rulesEngineDBAdmin", "rulesEngineDBAdmin");
1
rules_engine:PRIMARY> db.runCommand({ listDatabases: 1 })
{
"databases" : [
{
"name" : "admin",
"sizeOnDisk" : 83886080,
"empty" : false
},
{
"name" : "local",
"sizeOnDisk" : 1157627904,
"empty" : false
}
],
"totalSize" : 1241513984,
"ok" : 1
}
但是当我运行这段代码:
doesRulesEngineDbExists = Server.DatabaseExists(databaseName);
有了这个连接字符串:
mongodb://rulesEngineDBAdmin:[email protected]
我得到这个MongoCommandException:
Command 'listDatabases' failed: not authorized on admin to execute command
{ listDatabases: 1 }
(response:
{ "ok" : 0.0, "errmsg" : "not authorized on admin to execute command
{ listDatabases: 1 }", "code" : 13
}
)
如果有人遇到过这种情况,我很想知道发生了什么,以及我能做些什么来解决它。
你解决了这个问题吗?我正在使用dropDatabase类似的问题运行,使用dbOwner和root等角色。 – clopez 2014-10-10 00:44:56
对我来说,它最终是我的错误。我没有在安全部分的配置文件中添加“authorization:enabled”,因为那部分教程中并没有提到我正在遵循(我所有的是密钥文件)。所以它看起来像我能够连接,但我不能执行任何命令。 – Stephen 2014-10-13 14:40:06