未授权命令:addShard on database admin

时间:2013-07-06 21:33:57

标签: mongodb

我正在使用副本集碎片构建一个MongoDB集群,并且第一个副本集设置和三个配置服务器正在运行(所有在Linux服务器上),mongos实例运行指向三个配置服务器,但是当连接到通过mongo shell在应用程序服务器上(在Windows Server 2012 Standard x64上)mongos实例并按照the docs发出sh.addShard()命令,我收到以下响应:

> sh.addShard("rs1/xxx:xxx")
{
        "note" : "not authorized for command: addShard on database admin",
        "ok" : 0,
        "errmsg" : "unauthorized"
}

有谁知道我做错了什么?我正在使用密钥文件运行所有Mongo实例以确保安全性。根据{{​​3}},密钥文件是Windows兼容的。

4 个答案:

答案 0 :(得分:1)

我的结果:

如果您的数据节点使用基于密码文件的身份验证,则所有mongod和mongos实例(数据,配置等)也需要使用--keyFile并指向密钥文件的精确副本。

其次,确保在使用mongos连接到配置服务器后“使用admin”。如果这不能到达那里,那么在mongos提示符下添加一个管理员用户,使用这些凭据进行身份验证,然后重试。

答案 1 :(得分:0)

我已经解决了这个问题。这是因为凭据密钥文件启用了身份验证,并且使用localhost连接不足以进行身份​​验证。在群集中禁用密钥文件使用后,创建一个管理员帐户并使用该帐户进行连接后,它可以正常工作。

答案 2 :(得分:0)

除了bisharkha的回答,这里还有一个使用密钥文件的线索。

use admin命令之后,还要确保您已通过以下身份验证: db.auth("user", "passwd")

答案 3 :(得分:0)

当您为集合指定了错误的名称时,也会发生这种情况。