Mongodb 未授权执行以下命令:数据库管理上的addShard

Mongodb 未授权执行以下命令:数据库管理上的addShard,mongodb,Mongodb,我正在使用副本集碎片构建一个MongoDB集群,第一个副本集设置和三个配置服务器(都在Linux服务器上)运行,其中一个mongos实例指向三个配置服务器,但连接到应用服务器上的mongos实例时(在Windows server 2012标准x64上)通过mongo shell并根据发出sh.addShard()命令,我得到以下响应: > sh.addShard("rs1/xxx:xxx") { "note" : "not authorized for command: a

我正在使用副本集碎片构建一个MongoDB集群,第一个副本集设置和三个配置服务器(都在Linux服务器上)运行,其中一个mongos实例指向三个配置服务器,但连接到应用服务器上的mongos实例时(在Windows server 2012标准x64上)通过mongo shell并根据发出sh.addShard()命令,我得到以下响应:

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

有人知道我做错了什么吗?为了安全起见,我正在使用密钥文件运行所有Mongo实例。密钥文件是与Windows兼容的文件。

我已经解决了这个问题。这是因为身份验证是通过密钥文件启用的,而使用本地主机连接不足以进行身份验证。在禁用集群中的密钥文件使用、创建管理员帐户并使用该帐户进行连接之后,它就成功了。

我的结果:

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


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

除了bisharkha的答案之外,这里还有一条使用keyfile的线索

使用admin
命令后,还要确保您已通过以下验证:

db.auth(“用户”、“密码”)

当您指定了错误的收藏名称时,也会发生这种情况