我正在使用副本集碎片构建一个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兼容的。
答案 0 :(得分:1)
我的结果:
如果您的数据节点使用基于密码文件的身份验证,则所有mongod和mongos实例(数据,配置等)也需要使用--keyFile并指向密钥文件的精确副本。
其次,确保在使用mongos连接到配置服务器后“使用admin”。如果这不能到达那里,那么在mongos提示符下添加一个管理员用户,使用这些凭据进行身份验证,然后重试。
答案 1 :(得分:0)
我已经解决了这个问题。这是因为凭据密钥文件启用了身份验证,并且使用localhost连接不足以进行身份验证。在群集中禁用密钥文件使用后,创建一个管理员帐户并使用该帐户进行连接后,它可以正常工作。
答案 2 :(得分:0)
除了bisharkha的回答,这里还有一个使用密钥文件的线索。
在use admin
命令之后,还要确保您已通过以下身份验证:
db.auth("user", "passwd")
答案 3 :(得分:0)
当您为集合指定了错误的名称时,也会发生这种情况。