我权限时无法从C#驱动程序执行mongo命令

时间:2014-10-02 20:29:31

标签: c# mongodb mongodb-.net-driver

我刚刚为我的monngodb副本集添加了用户身份验证,现在我收到了MongoCommandException。

  

命令'listDatabases'失败:管理员未授权执行命令{listDatabases:1}(响应:{“ok”:0.0,“errmsg”:“管理员未授权执行命令{listDatabases:1}”, “代码”: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:rulesEngineDBAdmin@...

我得到这个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 
    }
)

如果有人之前遇到过这种情况,我很想知道发生了什么,以及我可以采取哪些措施来解决这个问题。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

这最终成了我的错误。我没有在安全部分下面的配置文件中添加“authorization:enabled”,因为我正在遵循的教程中没有提到该部分(我所拥有的是密钥文件)。所以看起来我能够连接,但我无法执行任何命令。