0

我正在使用副本集的碎片构建一个 MongoDB 集群,并设置了第一个副本集和三个运行的配置服务器(全部在 Linux 服务器上),运行的 mongos 实例指向三个配置服务器,但是当连接到 mongos 实例时应用程序服务器(在 Windows Server 2012 Standard 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 兼容的文件。

4

4 回答 4

1

我的结果:

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

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

于 2013-11-20T19:00:32.743 回答
0

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

于 2013-07-10T19:23:34.067 回答
0

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

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

于 2016-05-24T07:27:18.633 回答
0

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

于 2018-08-13T11:26:50.797 回答