2014-10-02 24 views
0

我刚刚将用户身份验证添加到了我的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 
    } 
) 

如果有人遇到过这种情况,我很想知道发生了什么,以及我能做些什么来解决它。

+0

你解决了这个问题吗?我正在使用dropDatabase类似的问题运行,使用dbOwner和root等角色。 – clopez 2014-10-10 00:44:56

+0

对我来说,它最终是我的错误。我没有在安全部分的配置文件中添加“authorization:enabled”,因为那部分教程中并没有提到我正在遵循(我所有的是密钥文件)。所以它看起来像我能够连接,但我不能执行任何命令。 – Stephen 2014-10-13 14:40:06

回答

0

要回答我的问题:

这结束了我的一个错误。我没有在安全部分的配置文件中添加“authorization:enabled”,因为那部分教程中并没有提到我正在遵循(我所有的是密钥文件)。所以它看起来像我能够连接,但我不能执行任何命令。

相关问题